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

问题描述 投票:-1回答:2

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

这是CustomAdapter类:

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;
    }
}
java android listview baseadapter
2个回答
1
投票

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

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

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

如果您想从父活动中获取所选项目视图,那么:

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>并做一些循环


0
投票

在您的活动中创建自定义侦听器接口,您的适配器将实现此功能。

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
}

}

© www.soinside.com 2019 - 2024. All rights reserved.