FirebaseRecyclerAdapter and multiply item types by android

I want to add 2 types: -

  • with image
  • no image

in mine recyclerview. I know that I need to override the method from FirebaseRecyclerAdapter, but I do not know how to do this. Please help me with this.

@Override
public int getItemViewType(int position) {
    return mModelLayout;
}


abstract protected void populateViewHolder(VH viewHolder, T model, int position);

So, I want to get the element type from the T-model through int (1 - with the image, 2 - without) and change the mModelLayout based on this information. Can I just add an if else statement?

+4
source share
4 answers

hatboysam. , , , , :

    mRecyclerViewAdapter = new FirebaseRecyclerAdapter<DataObjectModel, ViewHolder>(
            DataObjectModel.class, R.layout.defaultitem_layout, ViewHolder.class, mDatabaseRef) {

        @Override
        public void populateViewHolder(ViewHolder viewholder, final DataObjectModel dataobject, int position) {

            if (getItemViewType(position) == R.layout.my_image_item){
                viewholder.setName(dataobject.getName()); 
            }
            else if (getItemViewType(position) == R.layout.my_no_image_item{
                viewholder.setText(dataobject.getText());
        }


        @Override
        public int getItemViewType(int position) {
            DataObjectModel dataobject = getItem(position);
            if (dataobject.getType() != null && dataobject.getType().equals("image")) {
                // Layout for an item with an image
                return  R.layout.my_image_item);
            } else if (dataobject.getType() != null && dataobject.getType().equals("noimage")) {
                // Layout for an item without an image
                return  R.layout.my_no_image_item;
            }
        }
    };

//getName() setText() - , "public static class ChatHolder extends RecyclerView.ViewHolder" class

// ViewHolder

    public static class ViewHolder extends RecyclerView.ViewHolder {
        View mView;

        public ViewHolder (View itemView) {
            super(itemView);
            mView = itemView;
        }

        public void setName(String name) {
            TextView field = (TextView) mView.findViewById(R.id.name_text);
            field.setText(name);
        }

        public void setText(String text) {
            TextView field = (TextView) mView.findViewById(R.id.message_text);
            field.setText(text);
        }
}
+2

getItemViewType, , . :

@Override
public int getItemViewType(int position) {
    if (hasImage(position)) {
        // Layout for an item with an image
        return R.layout.my_image_item;
    } else {
        // Layout for an item without an image
        return R.layout.my_no_image_item;
    }
}

, onCreateViewHolder . ViewHolder . populateViewHolder .

+1

Try to do it Override.

mAdapter = new FirebaseRecyclerAdapter<Post, PostViewHolder>(options) {

    @Override
    public int getItemViewType(int position) {
        return super.getItemViewType(position);
    }
0
source

I found the answer on this website .

 mAdapter = new FirebaseRecyclerAdapter<User, RecyclerView.ViewHolder>(
            User.class, R.layout.item_user, RecyclerView.ViewHolder.class, ref) {
        @Override
        protected void populateViewHolder(final RecyclerView.ViewHolder viewHolder, final User user,
                                          final int position) {
            switch (user.getType()) {
                case Constants.USER_TYPE_1:
                    populateType1((ViewHolder1) viewHolder, user, position);
                    break;
                case Constants.USER_TYPE_2:
                    populateType2((ViewHolder2) viewHolder, user, position);
                    break;
                case Constants.USER_TYPE_3:
                    populateType3((ViewHolder3) viewHolder, user, position);
                    break;
            }
        }

        @Override
        public RecyclerView.ViewHolder onCreateViewHolder(ViewGroup parent, int viewType) {
            switch (viewType) {
                case USER_TYPE_1:
                    View userType1 = LayoutInflater.from(parent.getContext())
                            .inflate(R.layout.item_type1, parent, false);
                    return new ViewHolder1(userType1);
                case USER_TYPE_2:
                    View userType2 = LayoutInflater.from(parent.getContext())
                            .inflate(R.layout.item_type2, parent, false);
                    return new ViewHolder2(userType2);
                case USER_TYPE_3:
                    View userType3 = LayoutInflater.from(parent.getContext())
                            .inflate(R.layout.item_type3, parent, false);
                    return new ViewHolder3(userType3);
            }
            return super.onCreateViewHolder(parent, viewType);
        }

        @Override
        public int getItemViewType(int position) {
            User user = getItem(position);
            switch (user.getType()) {
                case Constants.USER_TYPE_1:
                    return USER_TYPE_1;
                case Constants.USER_TYPE_2:
                    return USER_TYPE_2;
                case Constants.USER_TYPE_3:
                    return USER_TYPE_3;
            }
            return super.getItemViewType(position);
        }
    };
-1
source

Source: https://habr.com/ru/post/1651203/


All Articles