如何在单击按钮时更改列表项的背景颜色?
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
}
}
我有一个 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
}
}