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

图片描述
怎样才能让我的常规布局正常点击响应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;
    }
}
阅读 3.1k
1 个回答

兄弟,写个等差数列测测吧,没什么好想法。
这种库,很难十全十美

撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题