目前我有一个视频“播放列表”,我可以将其切换到下一个位置(视频播放器)。
RecyclerView 有这个完整的 ArrayList 并像这样滚动到下一个位置:
mLinearLayoutManager.scrollToPositionWithOffset(position, 10);
完美!现在,我想自动选择(我不想在这里点击...)当前位置并突出显示它。
最终产品应该是这样的:
每次我点击媒体播放器上的下一个时,下一个项目(位置)将滚动并突出显示背景。
如何将位置传递给适配器以了解突出显示/更改背景的位置?请记住...此任务不涉及点击,项目需要始终保持突出显示,只有在选择下一个视频/项目/位置时才会发生变化。
已解决
适配器上的一些改动使其工作
private int highlightItem = 0;
public void toggleSelection(int pos) {
this.highlightItem = pos;
}
toggleSelection(position)
将从我一直存储当前位置的 Activity 中使用。
在那之后,我的 Adapter 中的最终更改是:
if (position == highlightItem) {
holder.mMainView.setSelected(true);
} else {
holder.mMainView.setSelected(false);
}
最佳答案
您需要稍微更改一下适配器。在您的适配器中编写一个 toggleSelection
函数并将位置传递给该函数。在全局数组中跟踪播放列表中项目的位置。这样,当播放一首歌曲时,您就知道它在 RecyclerView
中的位置。
我正在添加一个适配器示例。您可以自定义 toggleSelection
函数。
public class ToggleSelectionListAdapter extends RecyclerView.Adapter<RecyclerView.ViewHolder> {
private Cursor mCursor;
private SparseBooleanArray selectedItems;
public ToggleSelectionListAdapter(Cursor cursor) {
mCursor = cursor;
selectedItems = new SparseBooleanArray();
}
public void toggleSelection(int pos) {
if (selectedItems.get(pos, false)) {
selectedItems.delete(pos);
} else {
selectedItems.put(pos, true);
}
notifyItemChanged(pos);
}
public int getSelectedItemCount() {
return selectedItems.size();
}
public void clearSelections() {
selectedItems.clear();
notifyDataSetChanged();
}
public class ViewHolder extends RecyclerView.ViewHolder {
public ViewHolder(final View itemView) {
super(itemView);
// Initialize your items of each row here
}
public void bindView(int pos) {
try {
if (mCursor.isClosed())
return;
mCursor.moveToPosition(pos);
// Maintain a checked item list so that you can have a track if the item is clicked or not
if (checkedItems.contains(number) itemView.setBackgroundResource(R.drawable.background_selected);
else itemView.setBackgroundResource(R.drawable.background_normal);
itemView.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
if (checkedItems.contains(number)) {
checkedItems.remove(number);
} else {
checkedItems.add(number);
}
// Get the index of which item should toggle the background
int idx = mRecyclerView.getChildAdapterPosition(v);
toggleSelection(idx);
}
}
});
}
}
@Override
public RecyclerView.ViewHolder onCreateViewHolder(ViewGroup parent, int viewType) {
View v;
v = LayoutInflater.from(parent.getContext()).inflate(R.layout.list_item_row, parent, false);
ViewHolder vh = new ViewHolder(v);
return vh;
}
@Override
public void onBindViewHolder(RecyclerView.ViewHolder holder, int position) {
if (holder instanceof ViewHolder) {
ViewHolder vh = (ViewHolder) holder;
vh.bindView(position);
}
}
@Override
public int getItemCount() {
if (mCursor == null) {
return 0;
}
int n = mCursor.getCount();
return n;
}
@Override
public int getItemViewType(int position) {
return super.getItemViewType(position);
}
synchronized public void swapCursor(Cursor cursor) {
mCursor = cursor;
notifyDataSetChanged();
}
}
关于android - 自动选择 RecyclerView 的位置并高亮显示,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/36988556/