Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/android/208.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Android 自动选择RecyclerView的位置并将其高亮显示_Android_Scroll_Android Recyclerview_Adapter_Highlight - Fatal编程技术网

Android 自动选择RecyclerView的位置并将其高亮显示

Android 自动选择RecyclerView的位置并将其高亮显示,android,scroll,android-recyclerview,adapter,highlight,Android,Scroll,Android Recyclerview,Adapter,Highlight,目前,我有一个“播放列表”的视频谁我可以改变到下一个位置(视频播放器) RecyclerView具有完整的ArrayList并滚动到下一个位置,如下所示: mLinearLayoutManager.scrollToPositionWithOffset(position, 10); 太好了!现在,我想自动选择(我不想点击这里…)当前位置并突出显示它 最终产品应如下所示: mLinearLayoutManager.scrollToPositionWithOffset(position, 10);

目前,我有一个“播放列表”的视频谁我可以改变到下一个位置(视频播放器)

RecyclerView具有完整的ArrayList并滚动到下一个位置,如下所示:

mLinearLayoutManager.scrollToPositionWithOffset(position, 10);
太好了!现在,我想自动选择(我不想点击这里…)当前位置并突出显示它

最终产品应如下所示:

mLinearLayoutManager.scrollToPositionWithOffset(position, 10);

每次我在媒体播放器上点击“下一步”,下一项(位置)就会滚动并突出显示背景

如何将位置传递给适配器,以了解高亮显示/更改背景的位置?记得。。。此任务不涉及点击,项目需要始终保持高亮显示,仅在选择下一个视频/项目/位置时更改


解决了的 对适配器进行少量更改以使其正常工作

private int highlightItem = 0;

public void toggleSelection(int pos) {
   this.highlightItem = pos;
}
toggleSelection(position)
将在我的活动中使用,我一直存储当前位置

在此之后,我的适配器中的最后一个更改是:

if (position == highlightItem) {
     holder.mMainView.setSelected(true);
} else {
     holder.mMainView.setSelected(false);
}

您需要稍微更改一下适配器。在适配器中编写一个
toggleSelection
函数,并将位置传递给该函数。在全局阵列中跟踪播放列表中项目的位置。这样,当播放歌曲时,您就知道它在
RecyclerView
中的位置

我正在添加一个适配器示例。您可以自定义
切换选择功能

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();
        }
    }
public类ToggleSelectionListAdapter扩展了RecyclerView.Adapter{
私有游标mCursor;
专用SparseBooleanArray selectedItems;
公共切换SelectionListAdapter(光标){
mCursor=光标;
selectedItems=newsparsebooleanarray();
}
公共无效切换选择(int pos){
if(选择editems.get(pos,false)){
选择编辑项。删除(pos);
}否则{
选择editems.put(pos,true);
}
变更项目(pos);
}
public int getSelectedItemCount(){
返回selectedItems.size();
}
公共选举(){
选择editems.clear();
notifyDataSetChanged();
}
公共类ViewHolder扩展了RecyclerView.ViewHolder{
公共视图持有者(最终视图项视图){
超级(项目视图);
//在此处初始化每行的项目
}
公共视图(内部位置){
试一试{
if(mCursor.isClosed())
返回;
mCursor.moveToPosition(位置);
//维护选中的项目列表,以便在单击或未单击该项目时可以有一个跟踪
if(checkedItems.contains(number)itemView.setBackgroundResource(R.drawable.background_选中);
else itemView.setBackgroundResource(R.drawable.background\u normal);
itemView.setOnClickListener(新视图.OnClickListener(){
@凌驾
公共void onClick(视图v){
if(checkedItems.contains(number)){
checkedItems.remove(编号);
}否则{
checkedItems.add(编号);
}
//获取应切换背景的项目的索引
int idx=mRecyclerView.getChildAdapterPosition(v);
切换选择(idx);
}
}
});
}
}
@凌驾
public RecyclerView.ViewHolder onCreateViewHolder(视图组父级,int-viewType){
观点五;
v=LayoutInflater.from(parent.getContext()).flate(R.layout.list\u item\u行,parent,false);
视窗支架vh=新视窗支架(v);
返回vh;
}
@凌驾
BindViewHolder上的公共无效(RecyclerView.ViewHolder,int位置){
if(视图保持架的保持架实例){
视窗支架vh=(视窗支架)支架;
vh.bindView(位置);
}
}
@凌驾
public int getItemCount(){
if(mCursor==null){
返回0;
}
int n=mCursor.getCount();
返回n;
}
@凌驾
public int getItemViewType(int位置){
返回super.getItemViewType(位置);
}
同步的公共void swapCursor(光标){
mCursor=光标;
notifyDataSetChanged();
}
}

谢谢!这并不是我想要的答案……但它让我找到了正确的解决方案。很高兴知道这有帮助。@Reaz Murshed:我正在处理一个类似的列表,但我被卡住了,因为我的RecyclerView列表中的第一个项目在默认情况下总是高亮显示,但我只希望它在选中时高亮显示。关于如何修复的任何想法:请检查您问题的答案。希望这有帮助。很好的解决方案。我正在做一些类似的工作,但我被卡住了,因为我的RecyclerView列表中的第一个项目在默认情况下总是高亮显示,但我只希望它在选中时高亮显示。关于如何修复的任何想法:@AJW尝试初始化值为-1的
highlightItem
,而不是0什么是
holder.mMainView
?@MrNarendra这是旧问题,已经解决。是保存该行的主视图组。@Narendra先生使用-1值初始化解决了这个问题!干杯