如何在列表项异构的recyclerview的单击侦听器上进行设置

Shamsul Arefin Sajib

我有一个带有2种类型的Viewholder的recyclerview,用于显示我要在子项目中的子项目上的单击侦听器上实现的2种类型的项目,现有解决方案表明Viewholder类应在适配器内部实现为静态,但我已在sepearte文件中声明了它们(建议使用教程),所以我无法在viewholder上实现onlick侦听器,而我的viewholder1类是

    public  class ViewHolder1 extends RecyclerView.ViewHolder {

    private TextView label1, label2;
    public ImageView postImage;

    public ViewHolder1(View v) {
        super(v);
        label1 = (TextView) v.findViewById(R.id.text11);
        label2 = (TextView) v.findViewById(R.id.text22);
        postImage = (ImageView) v.findViewById(R.id.dummyImage);
    }


    public TextView getLabel1() {
        return label1;
    }

    public void setLabel1(TextView label1) {
        this.label1 = label1;
    }

    public TextView getLabel2() {
        return label2;
    }

    public void setLabel2(TextView label2) {
        this.label2 = label2;
    }
}

viewholder2

   public  class ViewHolder2 extends RecyclerView.ViewHolder {

    private ImageView ivExample;

    public ViewHolder2(View v) {
        super(v);
        ivExample = (ImageView) v.findViewById(R.id.ivExample);
    }

    public ImageView getImageView() {
        return ivExample;
    }

    public void setImageView(ImageView ivExample) {
        this.ivExample = ivExample;
    }
}

适配器是

public class ComplexRecyclerViewAdapter extends RecyclerView.Adapter<RecyclerView.ViewHolder> {





    // The items to display in your RecyclerView
    private List<Object> items;

    private final int USER = 0, IMAGE = 1;

    // Provide a suitable constructor (depends on the kind of dataset)
    public ComplexRecyclerViewAdapter(List<Object> items) {
        this.items = items;
    }

    // Return the size of your dataset (invoked by the layout manager)
    @Override
    public int getItemCount() {
        return this.items.size();
    }

    @Override
    public int getItemViewType(int position) {
        if (items.get(position) instanceof User) {
            return USER;
        } else if (items.get(position) instanceof String) {
            return IMAGE;
        }
        return -1;
    }



    @Override
    public RecyclerView.ViewHolder onCreateViewHolder(ViewGroup viewGroup, int viewType) {
        RecyclerView.ViewHolder viewHolder;
        LayoutInflater inflater = LayoutInflater.from(viewGroup.getContext());

        switch (viewType) {
            case USER:
                View v1 = inflater.inflate(R.layout.layout_viewholder1, viewGroup, false);
                viewHolder = new ViewHolder1(v1);
                break;
            case IMAGE:
                View v2 = inflater.inflate(R.layout.layout_viewholder2, viewGroup, false);
                viewHolder = new ViewHolder2(v2);
                break;
            default:
                View v3 = inflater.inflate(R.layout.layout_viewholder2, viewGroup, false);
                viewHolder = new ViewHolder2(v3);
                break;
        }
        return viewHolder;
    }


    @Override
    public void onBindViewHolder(RecyclerView.ViewHolder viewHolder, final int position) {
        switch (viewHolder.getItemViewType()) {
            case USER:
                ViewHolder1 vh1 = (ViewHolder1) viewHolder;
                configureViewHolder1(vh1, position);
                break;
            case IMAGE:
                ViewHolder2 vh2 = (ViewHolder2) viewHolder;
                configureViewHolder2(vh2);
                break;
            default:
                ViewHolder2 vh3 = (ViewHolder2) viewHolder;
                configureViewHolder2(vh3);
                break;
        }

    }
//    private void configureDefaultViewHolder(RecyclerViewSimpleTextViewHolder vh, int position) {
//        vh.getLabel().setText((CharSequence) items.get(position));
//    }
    private void configureViewHolder1(ViewHolder1 vh1, int position) {
        User user = (User) items.get(position);
        if (user != null) {
            vh1.getLabel1().setText(user.getMFName());
            vh1.getLabel2().setText( user.getMName());
            //vh1.postImage.setImageResource(R.drawable.universe);
            Picasso.with(vh1.postImage.getContext())
                    .load(R.drawable.universe)
                    .resize(400,200) // resizes the image to these dimensions (in pixel)
                    .centerCrop()
                    .placeholder(R.drawable.progress_animation)
                    .error(R.drawable.error_image)
                    .into(vh1.postImage);
        }
    }
    private void configureViewHolder2(ViewHolder2 vh2) {
       // vh2.getImageView().setImageResource(R.drawable.sample_golden_gate);
        Picasso.with(vh2.getImageView().getContext())
                .load(R.drawable.sample_golden_gate)
                .resize(400,200) // resizes the image to these dimensions (in pixel)
                .centerCrop()
                .placeholder(R.drawable.progress_animation)
                .error(R.drawable.error_image)
                .into(vh2.getImageView());
    }

}

使用所有片段

public class OneFragment extends Fragment  {

    private static final int VERTICAL_ITEM_SPACE = 48;

    Button button;
    RecyclerView rvMixed;
    public OneFragment() {
        // Required empty public constructor
    }

    @Override
    public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
    }

    @Override
    public View onCreateView(LayoutInflater inflater, ViewGroup container,
                             Bundle savedInstanceState) {

        // Inflate the layout for this fragment
        View rootView = inflater.inflate(R.layout.fragment_one, container, false);
        // Lookup the recyclerview in activity layout
        rvMixed = (RecyclerView) rootView.findViewById(R.id.rvContacts);
        rvMixed.setAdapter(new ComplexRecyclerViewAdapter(getSampleArrayList()));

        LinearLayoutManager layoutManager = new LinearLayoutManager(getActivity().getApplicationContext());
// Control orientation of the items
// also supports LinearLayoutManager.HORIZONTAL
        layoutManager.setOrientation(LinearLayoutManager.VERTICAL);
// Optionally customize the position you want to default scroll to
        layoutManager.scrollToPosition(0);
// Attach layout manager to the RecyclerView
        rvMixed.setLayoutManager(layoutManager);

        //adding spacing between recycler view items
       // rvMixed.addItemDecoration(new VerticalSpaceItemDecoration(VERTICAL_ITEM_SPACE));




        // That's all!

        return rootView;

    }
    private void bindDataToAdapter() {
        // Bind adapter to recycler view object
        rvMixed = (RecyclerView) getView().findViewById(R.id.rvContacts);
        ComplexRecyclerViewAdapter mAdapter = new ComplexRecyclerViewAdapter(getSampleArrayList());
        rvMixed.setAdapter(mAdapter);

    }
    private ArrayList<Object> getSampleArrayList() {
        ArrayList<Object> items = new ArrayList<>();
        items.add(new User("Dany Targaryen", "Valyria"));
        items.add(new User("Rob Stark", "Winterfell"));
        items.add("image");
        items.add(new User("Jon Snow", "Castle Black"));
        items.add("image");
        items.add(new User("Tyrion Lanister", "King's Landing"));
        return items;
    }

}
山姆

您只需在初始化时通过其构造函数传递ComplexRecyclerViewAdapter上的click Listener。然后,您可以为每个ViewHolder重用相同的单击侦听器引用。

本文收集自互联网,转载请注明来源。

如有侵权,请联系 [email protected] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章

如何在react js中的材料ui中的列表项上设置单击侦听器

如何在recyclerview内的视频视图上设置单击侦听器

如何在 Vue 组件中的每个列表项上附加事件侦听器?

Android RecyclerView如何设置单击侦听器-将类转换为接口

多个列表项的单个侦听器

Android 自定义视图:如何在单个小部件上设置单击侦听器

如何在recyclerView上为两个不同的事件设置侦听器?

RecyclerView项目单击侦听器

RecyclerView 中的自定义列表项侦听器接口不响应点击

如何在测试中的ApplicationEvent侦听器之前进行一些设置工作

如何在onTouch侦听器中检测到单击?

如何在Firebase值事件上设置侦听器?

如何在RadioButton中设置侦听器-Android

如何在Kotlin中为变量设置侦听器

如何在 BaseRecyclerAdapter 中设置 itemclick 侦听器

如何在片段之间很好地设置侦听器?

如何在Xamarin中设置onclick侦听器?

如何在对象数组上设置侦听器?

如何在Action侦听器中进行算术计算

如何在侦听器中进行重定向

如何使用事件侦听器将类切换到单个列表项

如何在动态字符串的反应js中事件侦听器或单击侦听器?

为列表视图中的项目设置项目单击侦听器并转到新活动

如何在ListView上设置一个侦听器,以便在列表数据发生更改时触发?

如何处理项目单击侦听器上的行及其内部视图的RecyclerView

在单击动画完成之前触发RecyclerView onclick侦听器

RecyclerView,适配器,单击侦听器和AsyncTask

在OnBindViewholder recyclerview android中单击侦听器

如何设置 MPErrorDomain 侦听器