ashish
ashish

Reputation: 307

How to set equal row height in RecyclerView?

I have json data file which has different size of item and rows size showing according to json data but I want to equal row size in RecyclerView.

How to achieve that I found only for GridLayoutManager only but its not meet my requirement, any help?

public class UserMsgAdpater extends RecyclerView.Adapter<UserMsgAdpater.MyViewHolder> {
public ArrayList<UserMessage> selected_usersList=new ArrayList<>();
private List<UserMessage> userList;
Context ctx;

TextView textview;
private SparseBooleanArray mSelectedItemsIds;

public UserMsgAdpater(Context context, List<UserMessage> data,ArrayList<UserMessage> selectedList) {
   this. userList = data;
   this. ctx = context;
   this.selected_usersList = selectedList;
    mSelectedItemsIds = new SparseBooleanArray();
}

public class MyViewHolder extends RecyclerView.ViewHolder {
    public TextView userName;
    public CardView cardView;

    public MyViewHolder(View view) {
        super(view);
        userName = (TextView) view.findViewById(R.id.user_temp);
    }
}
@Override
public MyViewHolder onCreateViewHolder(ViewGroup parent, int viewType) {
    View itemView = LayoutInflater.from(parent.getContext())
            .inflate(R.layout.user_temp_list, parent, false);
    return new MyViewHolder(itemView);
}

@Override
public void onBindViewHolder(MyViewHolder holder, int position)
{
    holder.userName.setText(userList.get(position).getMessage());

    holder.itemView
            .setBackgroundColor(mSelectedItemsIds.get(position) ?Color.GRAY
                    : Color.TRANSPARENT);

}
public void toggleSelection(int position) {
    selectView(position, !mSelectedItemsIds.get(position));
}

public void removeSelection() {
    mSelectedItemsIds = new SparseBooleanArray();
    notifyDataSetChanged();
}

//Put or delete selected position into SparseBooleanArray
public void selectView(int position, boolean value) {
    if (value)
        mSelectedItemsIds.put(position, value);
    else
        mSelectedItemsIds.delete(position);

    notifyDataSetChanged();
}

//Get total selected count
public int getSelectedCount() {
    return mSelectedItemsIds.size();
}

//Return all selected ids
public SparseBooleanArray getSelectedIds() {
    return mSelectedItemsIds;
}

@Override
public int getItemCount() {
    return userList.size();
}

public UserMessage get(int i) {
    return userList.get(i);
}}

in my activity I'm using this code for item decoration please look at that.

mRecyclerView.setItemAnimator(new DefaultItemAnimator());
        mRecyclerView.addItemDecoration(new DividerItemDecoration(mContext, LinearLayoutManager.VERTICAL));
        mRecyclerView.addItemDecoration(new EqualSpacingItemDecoration(16,EqualSpacingItemDecoration.VERTICAL));

Upvotes: 4

Views: 4159

Answers (1)

Sergey Emeliyanov
Sergey Emeliyanov

Reputation: 6951

You can set the height of each item inside your ViewHolder constructor:

TableRow.LayoutParams params = new TableRow.LayoutParams(TableRow.LayoutParams.MATCH_PARENT, mHeight); 
itemView.setLayoutParams(params);

where mHeight is an integer value of the desired item height.

For your code it'll look like this:

private int mHeight = 100;

public class MyViewHolder extends RecyclerView.ViewHolder {
    public TextView userName;
    public CardView cardView;

    public MyViewHolder(View view) {
        super(view);
        userName = (TextView) view.findViewById(R.id.user_temp);

        TableRow.LayoutParams params = new TableRow.LayoutParams(TableRow.LayoutParams.MATCH_PARENT, mHeight);
        view.setLayoutParams(params);

    }
}

Upvotes: 1

Related Questions