如何在单击按钮时更改列表项的背景颜色?

How to change the background color of a list item at click on a button?

我有一个 ListView 和一个 CustomAdapter。元素都已成功加载到列表中。现在我想通过单击外部按钮来更改列表中某个元素的背景颜色。但我不知道如何访问列表中的特定项目。

这是自定义适配器 class:

public class CustomAdapter extends BaseAdapter {

    private Context ctx;
    private int resource;
    private List<ItemModel> items;


    public PreorderListAdapter(Context context, int resource, List<ItemModel> items){
        this.ctx = context;
        this.resource = resource;
        this.items = items;
    }

    @Override
    public int getCount() {
        return items.size();
    }

    @Override
    public ItemModel getItem(int position) {
        return items.get(position);
    }

    @Override
    public long getItemId(int position) {
        return position;
    }

    @NonNull
    @Override
    public View getView(int i, View convertView, @NonNull ViewGroup parent) {

        View view = convertView;

        if(view == null){
            LayoutInflater inflater = (LayoutInflater)ctx.getSystemService(Context.LAYOUT_INFLATER_SERVICE);
            view = inflater.inflate(resource, null);
        }


        TextView text1 = (TextView) view.findViewById(R.id.text1);
        TextView text2 = (TextView) view.findViewById(R.id.text2);
        TextView text3 = (TextView) view.findViewById(R.id.text3);

        ItemModel item = items.get(i);

        text1.setText(item.getName());
        text2.setText(item.getOption2());
        text3.setText(item.getOption3());

        return view;
    }
}

您可以在 getView() 方法中这样做

view.setOnClickListener(new OnClickListener() 
   { 
     @Override
     public void onClick(View v)
         { 
           view.setBackgroundColor(ContextCompat.getColor(this, R.color.yourcolor));
          }
   });

如果您的视图上有一个按钮,则在该按钮上执行侦听器

如果您想从 parent activity 中获取所选项目视图,则:

yourlistview.setOnItemClickListener(new AdapterView.OnItemClickListener() 
{ 
 @Override 
  public void onItemClick(AdapterView<?>     parent,View view, int position, long id) 
    { 
       selectedposition = position ;
     }
  });


  View view = listView.getAdapter().getView(selectedposition,null,listview);

然后更改其背景:

view.setBackgroundColor(ContextCompat.getColor(this, R.color.yourcolor));

请在您的 color.xml 文件中定义您的颜色

如果您有多个视图,则创建一个 ArrayList<View> 并执行一些循环

在您的 activity 和您的 适配器将实现这一点。

public interface OnClickListenerFromActivity {
    void onActivityButtonClick(int position);
}

点击你的按钮调用你的监听器的方法

    mOnClickListenerFromActivity.onActivityButtonClick(mList.getItem(yourPostion));

将此侦听器实现到您的适配器中

public class CustomAdapter extends BaseAdapter implements Activity.OnClickListenerFromActivity {

private Context ctx;
private int resource;
private List<ItemModel> items;


public PreorderListAdapter(Context context, int resource, List<ItemModel> items){
    this.ctx = context;
    this.resource = resource;
    this.items = items;
}

@Override
public int getCount() {
    return items.size();
}

@Override
public ItemModel getItem(int position) {
    return items.get(position);
}

@Override
public long getItemId(int position) {
    return position;
}

@NonNull
@Override
public View getView(int i, View convertView, @NonNull ViewGroup parent) {

    View view = convertView;

    if(view == null){
        LayoutInflater inflater = (LayoutInflater)ctx.getSystemService(Context.LAYOUT_INFLATER_SERVICE);
        view = inflater.inflate(resource, null);
    }


    TextView text1 = (TextView) view.findViewById(R.id.text1);
    TextView text2 = (TextView) view.findViewById(R.id.text2);
    TextView text3 = (TextView) view.findViewById(R.id.text3);

    ItemModel item = items.get(i);

    text1.setText(item.getName());
    text2.setText(item.getOption2());
    text3.setText(item.getOption3());

    return view;
}

public void onActivityButtonClick(int position) {
    // get your item through position and
    // set your color here
}

}