baseAdapter icon indicating copy to clipboard operation
baseAdapter copied to clipboard

多种ItemViewType只支持2种?

Open liziyang0625 opened this issue 8 years ago • 10 comments

多种ItemViewType只支持2种?3种及以上怎么操作?

liziyang0625 avatar Mar 15 '17 05:03 liziyang0625

添加不同的ItemDelegate就可以了的

lpslpsl avatar Mar 23 '17 06:03 lpslpsl

@CuteHero 添加不同的ItemDelegate,然后在构造中添加进去。通过isForViewType来控制。

wmhqnyh avatar Mar 30 '17 03:03 wmhqnyh

并不能,因为是根据isForViewType 来确定条目类型的

Ruomiz avatar May 24 '17 03:05 Ruomiz

@wmhqnyh 怎么通过isForViewType()来控制?这个方法返回的是一个boolean类型的值, 这个方法的作用是什么?

mundane799699 avatar Jun 14 '17 06:06 mundane799699

@lpslpsl 能否给一个demo来说明

mundane799699 avatar Jun 14 '17 06:06 mundane799699

@mundane799699 比如下面代码。聊天的时候判断消息类型是否是IMAGE类型。其他的ItemDelegate同理。 @Override public boolean isForViewType(EMMessage item) { return item.getType() == EMMessage.Type.IMAGE&&mDirect== EMMessage.Direct.RECEIVE; }

lpslpsl avatar Jun 14 '17 07:06 lpslpsl

@lpslpsl 能否给一个完整的project代码, 我能运行跑起来看效果的那种(麻烦你了)

mundane799699 avatar Jun 14 '17 07:06 mundane799699

@mundane799699 抱歉没有能完整的拿出来的项目。 如下代码片段应该够了。 mAdapter = new MultiItemTypeAdapter(this, mMessageList); mAdapter.addItemViewDelegate(new MessageTextSendDelagate(this)); mAdapter.addItemViewDelegate(new MessageTextRecDelagate(this)); mAdapter.addItemViewDelegate(new MessageIMGSendDelagate(this)); mAdapter.addItemViewDelegate(new MessageIMGRecDelagate(this)); mAdapter.addItemViewDelegate(new MessageVoiceRecDelagate(this)); mAdapter.addItemViewDelegate(new MessageVoiceSendDelagate(this)); mAdapter.addItemViewDelegate(new MessageLocationDelagate(this)); mMessagerecyclerview.setAdapter(mAdapter);

@Override
public boolean isForViewType(EMMessage item) {
    return item.getType() == EMMessage.Type.TXT && mDirect == EMMessage.Direct.SEND;
}

@Override
public boolean isForViewType(EMMessage item) {
    return item.getType() == EMMessage.Type.TXT && mDirect == EMMessage.Direct.RECEIVE;
}

@Override public boolean isForViewType(EMMessage item) { return item.getType() == EMMessage.Type.VOICE&&mDirect == EMMessage.Direct.RECEIVE; }

lpslpsl avatar Jun 14 '17 07:06 lpslpsl

java.lang.IllegalArgumentException: No ItemViewDelegate added that matches position=3 in data source 这个是为什么,数据源有六条数据啊,不科学

igding avatar Aug 14 '17 07:08 igding

@igding 你的第四条数据是不是没有对应的ItemViewDelegate

lpslpsl avatar Aug 14 '17 07:08 lpslpsl