簡體   English   中英

如何在單擊按鈕時更改列表項的背景顏色?

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

我有一個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;
    }
}

您可以在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>並執行一些循環

在您的活動中創建一個自定義偵聽器接口,您的適配器將實現此目的。

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
}

}

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM