[英]How to change selected recyclerview list item to be marked as a different color
I need to change the color for selected listview item for different color. 我需要将所选列表视图项目的颜色更改为其他颜色。 I had to implemented for the below code for changing list item color, but if I select the 1st item of the visible Item after scrolling it had to change the color every newly visibled item. 我必须为更改列表项颜色的以下代码实现,但是如果在滚动后选择可见项的第一个项,则必须更改每个新可见项的颜色。 Anyone can suggest me for the best solution. 任何人都可以建议我寻求最佳解决方案。
Code snippet. 代码段。
@Override
public void onBindViewHolder(final ViewHolder viewHolder, final int i) {
PlayListItem nature = mItems.get(i);
try {
if (nature.getmInnerTitle() != null && nature.getmInnerTVName() != null) {
viewHolder.tvInnerTitle.setText(nature.getmInnerTitle());
mVideoID = nature.getmInnerVideoID();
Picasso.with(activity)
.load(nature.getmInnerThumpnailURL())
/* .placeholder(R.drawable.my_thumnail_small)*/
.into(viewHolder.imgInnerThumbnail);
viewHolder.tvInnerTVName.setText("by " + nature.getmInnerTVName());
}
} catch (NullPointerException e) {
e.printStackTrace();
}
viewHolder.item_view.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
System.out.println("Save Value------Inner-------->" + save);
Toast.makeText(activity, "Position---->" + i + " Playlist ID : ", Toast.LENGTH_LONG).show();
// Change BG color for selected List Item
VideoPlayActivity.mRecyclerView.getChildAt(i).setBackgroundColor(
Color.parseColor("#EEEEEE"));
System.out.println("Save Value------1-------->" + save);
if (save != -1 && save != i) {
VideoPlayActivity.mRecyclerView.getChildAt(save).setBackgroundColor(
Color.parseColor("#FFFFFF"));
System.out.println("Save Value------2-------->" + save);
}
save = i;
System.out.println("Save Value------3-------->" + save);
}
});
viewHolder.itemView.post(new Runnable() {
@Override
public void run() {
int cellWidth = viewHolder.itemView.getWidth();// this will give you cell width dynamically
int cellHeight = viewHolder.itemView.getHeight();// this will give you cell height dynamically
mdynamicHeight.HeightChange(i, cellHeight); //call your iterface hear
}
});
}
Yes Finally I got the answer. 是的,最后我得到了答案。 Here the working code snippet. 这里是工作代码段。
private int focusedItem = 0;
@Override
public void onAttachedToRecyclerView(final RecyclerView recyclerView) {
super.onAttachedToRecyclerView(recyclerView);
// Handle key up and key down and attempt to move selection
recyclerView.setOnKeyListener(new View.OnKeyListener() {
@Override
public boolean onKey(View v, int keyCode, KeyEvent event) {
RecyclerView.LayoutManager lm = recyclerView.getLayoutManager();
// Return false if scrolled to the bounds and allow focus to move off the list
if (event.getAction() == KeyEvent.ACTION_DOWN) {
if (keyCode == KeyEvent.KEYCODE_DPAD_DOWN) {
return tryMoveSelection(lm, 1);
} else if (keyCode == KeyEvent.KEYCODE_DPAD_UP) {
return tryMoveSelection(lm, -1);
}
}
return false;
}
});
}
private boolean tryMoveSelection(RecyclerView.LayoutManager lm, int direction) {
int tryFocusItem = focusedItem + direction;
// If still within valid bounds, move the selection, notify to redraw, and scroll
if (tryFocusItem >= 0 && tryFocusItem < getItemCount()) {
notifyItemChanged(focusedItem);
focusedItem = tryFocusItem;
notifyItemChanged(focusedItem);
lm.scrollToPosition(focusedItem);
return true;
}
return false;
}
@Override
public void onBindViewHolder(final ViewHolder viewHolder, final int i) {
PlayListItem nature = mItems.get(i);
try {
if (nature.getmInnerTitle() != null && nature.getmInnerTVName() != null) {
viewHolder.tvInnerTitle.setText(nature.getmInnerTitle());
mVideoID = nature.getmInnerVideoID();
Picasso.with(activity)
.load(nature.getmInnerThumpnailURL())
/* .placeholder(R.drawable.my_thumnail_small)*/
.into(viewHolder.imgInnerThumbnail);
viewHolder.tvInnerTVName.setText("by " + nature.getmInnerTVName());
}
} catch (NullPointerException e) {
e.printStackTrace();
}
viewHolder.itemView.setSelected(focusedItem == i);
viewHolder.itemView.post(new Runnable() {
@Override
public void run() {
int cellWidth = viewHolder.itemView.getWidth();// this will give you cell width dynamically
int cellHeight = viewHolder.itemView.getHeight();// this will give you cell height dynamically
mdynamicHeight.HeightChange(i, cellHeight); //call your iterface hear
}
});
}
@Override
public int getItemCount() {
return mItems.size();
}
class ViewHolder extends RecyclerView.ViewHolder {
public ImageView imgInnerThumbnail;
public TextView tvInnerTitle;
public TextView tvInnerVideoID;
public TextView tvInnerCount;
public TextView tvInnerTVName;
public View item_view;
public ViewHolder(View itemView) {
super(itemView);
imgInnerThumbnail = (ImageView) itemView.findViewById(R.id.img_innerView);
tvInnerTitle = (TextView) itemView.findViewById(R.id.txt_InnerTitle);
//tvInnerID = (TextView) itemView.findViewById(R.id.);
tvInnerTVName = (TextView) itemView.findViewById(R.id.txt_InnerTVName);
item_view = itemView;
item_view.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
notifyItemChanged(focusedItem);
focusedItem = getLayoutPosition();
notifyItemChanged(focusedItem);
}
});
}
}
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.