简体   繁体   English

如何将选定的recyclerview列表项更改为标记为其他颜色

[英]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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM