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