请教一个使用多布局的问题,使用的是BRVAH

202005021116 应用层 2019-01-30 08:23:53
怎样才能让我的常规布局正常点击响应item,现在前面三个item点击正常,点击第四个item响应的是红色的多布局,点击"我是第3条标题"应该显示position为3的,下面是三个类



public class ManyLayoutActivity extends AppCompatActivity implements BaseQuickAdapter.OnItemClickListener {

private RecyclerView recyclerView;
private List<Model> datas;
private MultiDelegateAdapter adapter;

@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_many_layout);

//初始化RecyclerView
recyclerView = (RecyclerView) findViewById(R.id.recycler_view);
//模拟的假数据(实际开发中当然是从网络获取数据)
datas = new ArrayList<>();
//创建布局管理
LinearLayoutManager layoutManager = new LinearLayoutManager(this);
layoutManager.setOrientation(LinearLayoutManager.VERTICAL);
recyclerView.setLayoutManager(layoutManager);

//创建适配器
adapter = new MultiDelegateAdapter(datas);
Model model;
for (int i = 0; i < 5; i++) {
model = new Model();
model.setTitle("常规布局 : 我是第" + i + "条标题");
model.setContent("常规布局 : 第" + i + "条内容");
if (i == 3) {
Model model2 = new Model();
model2.setType(Model.FIRST_TYPE);
datas.add(model2);
}
model.setType(Model.NORMAL_TYPE);
datas.add(model);
}
recyclerView.setAdapter(adapter);
adapter.setOnItemClickListener(this);
}


@Override
public void onItemClick(BaseQuickAdapter adapter, View view, int position) {
Toast.makeText(this, "点击" + position, Toast.LENGTH_SHORT).show();
}
}


public class MultiDelegateAdapter extends BaseQuickAdapter<Model, BaseViewHolder> {

public MultiDelegateAdapter(@Nullable List<Model> data) {
super(data);
setMultiTypeDelegate(new MultiTypeDelegate<Model>() {
@Override
protected int getItemType(Model entity) {
//根据你的实体类来判断布局类型
return entity.type;
}
});

getMultiTypeDelegate()
.registerItemType(Model.FIRST_TYPE, R.layout.first_type_layout)
.registerItemType(Model.SECOND_TYPE, R.layout.second_type_layout)
.registerItemType(Model.NORMAL_TYPE, R.layout.item_many_layout);
}

@Override
protected void convert(BaseViewHolder helper, Model item) {
switch (helper.getItemViewType()) {
case Model.FIRST_TYPE:
break;
case Model.SECOND_TYPE:
break;
case Model.NORMAL_TYPE:
helper.setImageResource(R.id.iv_img, R.mipmap.ic_launcher)
.setText(R.id.tv_title, item.getTitle())
.setText(R.id.tv_content, item.getContent());
break;
}
}

}


public class Model {

public static final int FIRST_TYPE = 1;
public static final int SECOND_TYPE = 2;
public static final int NORMAL_TYPE = 3;

//添加类型变量
public int type;

private String title;
private String content;
private String imgUrl;

public static int getFirstType() {
return FIRST_TYPE;
}

public static int getSecondType() {
return SECOND_TYPE;
}

public static int getNormalType() {
return NORMAL_TYPE;
}

public int getType() {
return type;
}

public void setType(int type) {
this.type = type;
}

public String getTitle() {
return title;
}

public void setTitle(String title) {
this.title = title;
}

public String getContent() {
return content;
}

public void setContent(String content) {
this.content = content;
}

public String getImgUrl() {
return imgUrl;
}

public void setImgUrl(String imgUrl) {
this.imgUrl = imgUrl;
}
}
...全文
265 4 打赏 收藏 转发到动态 举报
写回复
用AI写文章
4 条回复
切换为时间正序
请发表友善的回复…
发表回复
SemiraChen 2019-02-01
  • 打赏
  • 举报
回复
BRVAH就是这样的,一级和二级混杂在一起的,没法帮你知道这是二级的第几条。得靠你自己处理了
202005021116 应用层 2019-01-31
  • 打赏
  • 举报
回复
引用 1 楼 jklwan 的回复:
你自己的数据问题,看你的代码

for (int i = 0; i < 5; i++) {
            model = new Model();
            model.setTitle("常规布局 :  我是第" + i + "条标题");
            model.setContent("常规布局 :    第" + i + "条内容");
            if (i == 3) {
                Model model2 = new Model();
                model2.setType(Model.FIRST_TYPE);
                datas.add(model2);
            }
            model.setType(Model.NORMAL_TYPE);
            datas.add(model);
}
虽然是五个循环,但是是6条数据 i等于3时你加了两条数据,一条normal(position为3),一条first(position为4,内容却是第3条内容)
如果不在i==3的时候加一条数据,常规布局的数据就少一条
jklwan 2019-01-31
  • 打赏
  • 举报
回复
你自己的数据问题,看你的代码

for (int i = 0; i < 5; i++) {
            model = new Model();
            model.setTitle("常规布局 :  我是第" + i + "条标题");
            model.setContent("常规布局 :    第" + i + "条内容");
            if (i == 3) {
                Model model2 = new Model();
                model2.setType(Model.FIRST_TYPE);
                datas.add(model2);
            }
            model.setType(Model.NORMAL_TYPE);
            datas.add(model);
}
虽然是五个循环,但是是6条数据 i等于3时你加了两条数据,一条normal(position为3),一条first(position为4,内容却是第3条内容)
jklwan 2019-01-31
  • 打赏
  • 举报
回复
引用 2 楼 丿roybill 的回复:
如果不在i==3的时候加一条数据,常规布局的数据就少一条
额,不知道你想说什么,我的意思是第三个内容就是第五条数据,position为4是对的。

80,351

社区成员

发帖
与我相关
我的任务
社区描述
移动平台 Android
androidandroid-studioandroidx 技术论坛(原bbs)
社区管理员
  • Android
  • yechaoa
  • 失落夏天
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧