【问题标题】:Change background of item in Adapter更改适配器中项目的背景
【发布时间】:2016-07-04 06:35:51
【问题描述】:

我想更改适配器中选定列表项的背景。

列表适配器

    @Override
    public View getView(int position, View convertView, ViewGroup parent) {
        final Card card = getItem(position);

        final ViewHolder viewHolder;
        if (convertView != null) {
            viewHolder = (ViewHolder) convertView.getTag();
        } else {
            convertView = from(context).inflate(R.layout.card_item, parent, false);
            viewHolder = new ViewHolder(convertView);
            convertView.setTag(viewHolder);
        }


       viewHolder.select.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {
                viewHolder.cardLayout.setBackgroundColor(ContextCompat.getColor(context, R.color.md_grey_600));
            }
       });
        return convertView;
    }

    private class ViewHolder {
        Button select;
        RelativeLayout cardLayout;

        public ViewHolder(View view) {
            select = (Button) view.findViewById(R.id.carditem_btn_upvote);
            cardLayout = (RelativeLayout) view.findViewById(R.id.cardlist_item);
        }
    }

问题是当我为 ex 选择时。列表的第一项,第 7 项也被选中。我注意到有一种赞助人。当我选择第二项时,第 8 项也被选中,依此类推。

【问题讨论】:

  • 您需要在某些集合 HashMap 中维护您选择的项目位置,并为特定位置提供颜色值。

标签: android list listview adapter


【解决方案1】:

假设您在列表中有 10 个项目,最初您会将所有项目颜色存储为白色。

 HashMap<Integer,Integer> mhashColorselected=new HashMap();
HashMap<Integer,Integer> mHashBtnVisibility=new HashMap();

  for(i=0;i<10;i++){
//Put Default Color of your All list item will be here 
mhashColorselected.put(i,R.color.white)

mHashBtnVisibility.put(i,View.Invisible);

} 

现在在您的适配器中 getView();

   @Override
            public View getView(final int position, View convertView, ViewGroup parent) {
                final Card card = getItem(position);

                final ViewHolder viewHolder;
                if (convertView != null) {
                    viewHolder = (ViewHolder) convertView.getTag();
                } else {
                    convertView = from(context).inflate(R.layout.card_item, parent, false);
                    viewHolder = new ViewHolder(convertView);
                    convertView.setTag(viewHolder);
                }


               viewHolder.select.setOnClickListener(new View.OnClickListener() {
                    @Override
                    public void onClick(View v) {
                        viewHolder.cardLayout.setBackgroundColor(ContextCompat.getColor(context, R.color.md_grey_600));

    //Here we are storing Selected item By User 
         mhashColorselected.put(position,R.color.md_grey_600);
          mHashBtnVisibility.put(i,View.Visible);

        notifitydataSetChange();
                    }
               });


        //Here it's will take fault value or else it will set color as selected item 
        viewHolder.cardLayout.setBackgroundColor(ContextCompat.getColor(context, mhashColorselected.getValue(position)));


 if(View.VISIBLE==mHashBtnVisibility.get(position)){

 viewHolder.select.setVisibility(View.VISIBLE)
    }else{
 viewHolder.select.setVisibility(View.INVISIBLE)

    }



                return convertView;
            }

【讨论】:

  • 如果我想将“选择”按钮的可见性设置为单击后不可见?我尝试以与背景颜色相同的方式执行此操作,但是当我编写:viewHolder.select.setVisibility(mhashButtonSelected.get(position)) 时,我得到:“必须是可见、不可见、已消失之一”
  • 为此,您应该在 HashMap 中通过 Flag 保持相同的值,默认值应类似于 Visibility.Invisible,然后单击设置值,例如 mHashMap.put(position,View.Visible );
  • 这就是我想要做的,但是 viewHolder.select.setVisibility(mhashButtonSelected.get(position));不工作
  • @Claudiu 但是你仍然可以从工作室构建应用程序。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2021-08-21
  • 2019-08-07
  • 1970-01-01
  • 1970-01-01
  • 2018-04-19
  • 2012-03-10
  • 1970-01-01
相关资源
最近更新 更多