【问题标题】:Changing colors to recyclerview items将颜色更改为 recyclerview 项目
【发布时间】:2016-11-15 06:16:19
【问题描述】:

我的 recyclerview 显示 2 个文本视图和 1 个图像视图。在适配器的 onbindviewholder 内,我可以很好地设置 2 个 textview 的文本,但是当我更改颜色时,它们会变得不可见。

另外,当我删除 recyclerview 项目,然后“撤消”它时,它会显示颜色变化。我做错了什么?

我怀疑它与其中一个 notify...() 方法有关,但是当我尝试将其中一个放入 onbindviewholder 时,应用程序将在启动时崩溃。

public class MemoListAdapter extends RecyclerView.Adapter<MemoListAdapter.ViewHolder> {

private CardView cv;
private List<Memo> mMemos;
private Context mContext;
public List<Memo> memosToRemove;

//pass in the list of notes to display
public MemoListAdapter(List<Memo> memos, Context context) {
    mMemos = memos;
    mContext = context;

}

@Override
public ViewHolder onCreateViewHolder(ViewGroup parent, int viewType) {
    View rowView = LayoutInflater.from(parent.getContext()).inflate(R.layout.row_memo_list, parent, false);
    ViewHolder viewHolder = new ViewHolder(rowView, mContext, mMemos);


    return viewHolder;
}

//@param holder & position - identifies the Note we are working with
@Override
public void onBindViewHolder(final ViewHolder holder, int position) {

    holder.memoTitle.setText(mMemos.get(position).getTitle());
    holder.memoContent.setText(mMemos.get(position).getContent());
    holder.memoIcon.setColorFilter(mMemos.get(position).getNotificationColor());
    holder.memoTitle.setTextColor(mMemos.get(position).getNotificationColor());
}

这是正确显示颜色更改的撤消方法

 public void onItemRemove(final RecyclerView.ViewHolder viewHolder, final RecyclerView mRecyclerView) {

    final int adapterPosition = viewHolder.getAdapterPosition();
    final int memoID = mMemos.get(adapterPosition).getId();
    final DatabaseHandler db = new DatabaseHandler(mContext);
    final Memo memo = db.getMemo(memoID);

    mMemos.remove(adapterPosition);
    db.deleteMemo(memo);
    notifyItemRemoved(adapterPosition);

    Snackbar snackbar = Snackbar
            .make(mRecyclerView, mContext.getString(R.string.note_deleted), Snackbar.LENGTH_LONG)
            .setAction(R.string.undo_string, new View.OnClickListener() {
                @Override
                public void onClick(View view) {
                    mMemos.add(adapterPosition, memo);
                    notifyItemInserted(adapterPosition);
                    mRecyclerView.scrollToPosition(adapterPosition);
                    db.addMemo(memo);
                }
            });

[IMAGE] When app opens

然后我将笔记滑开,然后快速按撤消

[IMAGE] After I press the undo delete on the snackbar

【问题讨论】:

  • 您是否以编程方式更改颜色
  • @snlvtr 告诉我“mMemos.get(position).getNotificationColor()”的值
  • @snlvtr 为测试用例尝试 holder.memoTitle.setTextColor(Color.RED)?并检查它是否工作
  • @AnantShah 我得到的值是 6,这很奇怪。我在另一个类中使用了 getNotificationColor(),它工作正常。
  • @Raghavendra 刚刚尝试过,它有效。

标签: android android-recyclerview adapter


【解决方案1】:
@Override
public void onBindViewHolder(MyViewHolder holder, int position) {
    if(position == selected_item) {
        holder.title.setTextColor(Color.parseColor("#00aaff"));
        holder.imgViewIcon.setBackgroundResource(R.drawable.ic_circle);
    } else {
        holder.title.setTextColor(Color.parseColor("#00000")); //actually you should set to the normal text color
        holder.imgViewIcon.setBackgroundResource(0);
    }
    NavDrawerItem current = data.get(position);
    holder.title.setText(current.getTitle());
    holder.imgViewIcon.setImageResource(current.getIcon());


}

编辑:删除链接(应该编辑到 OP)

【讨论】:

    【解决方案2】:

    通过将 onBindViewHolder 编辑到这个来解决问题:

     @Override
    public void onBindViewHolder(final ViewHolder holder, int position) {
        Memo m = mMemos.get(position);
        int id = m.getId();
        DatabaseHandler db = new DatabaseHandler(mContext);
        Memo memo = db.getMemo(id);
        int color = memo.getNotificationColor();
    
        holder.memoTitle.setText(mMemos.get(position).getTitle());
        holder.memoContent.setText(mMemos.get(position).getContent());
        holder.memoIcon.setColorFilter(color);
        holder.memoTitle.setTextColor(color);
    

    基本上我必须直接从数据库中获取项目或“备忘录”,而不是依赖于基于@param 位置获取备忘录

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2017-06-13
      • 1970-01-01
      • 1970-01-01
      • 2018-08-02
      • 1970-01-01
      • 2023-03-28
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多