gpt4 book ai didi

android - 带复选框的 ListView Holder

转载 作者:行者123 更新时间:2023-11-30 02:53:36 25 4
gpt4 key购买 nike

我正在开发具有自定义布局arrayAdapter 的应用。我的自定义布局由 1 个 ImageView、2 个 textView 和 1 个复选框组成。

Booth 的图像文件和文本存储在 values 文件夹中的 string.xml 中。

enter image description here

所以我的问题是当我点击复选框时无法获得正确的位置(索引)。我只希望在复选框的位置上出现 Toast 消息。

例如如果我点击 meme3 复选框 出现 2

让我们看一些代码:

@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);

Resources res = getResources();
titles = res.getStringArray(R.array.titles);
descriptions = res.getStringArray(R.array.descriptions);
list = (ListView) findViewById(R.id.listView1);

MyAdapter adapter = new MyAdapter(this, titles, images, descriptions);
list.setAdapter(adapter);
}

这是我的 ArrayAdapter

class MyAdapter extends ArrayAdapter<String> implements OnCheckedChangeListener {
Context context;
int[] images;
String[] titlesArray, descrptionArray;

MyAdapter(Context context, String[] titles, int[] images, String[] description) {
super(context, R.layout.single_row, R.id.textView1, titles);
this.context = context;
this.images = images;
this.titlesArray = titles;
this.descrptionArray = description;
}

class MyViewHolder {
ImageView myImage;
TextView myTitle;
TextView myDescription;
CheckBox box;

MyViewHolder(View v) {
myImage = (ImageView) v.findViewById(R.id.imageView1);
myTitle = (TextView) v.findViewById(R.id.textView1);
myDescription = (TextView) v.findViewById(R.id.textView2);
box = (CheckBox) v.findViewById(R.id.checkBox1);
}
}

@Override
public View getView(int position, View convertView, ViewGroup parent) {
View row = convertView;
MyViewHolder holder = null;
if (row == null) {
LayoutInflater inflater = (LayoutInflater) context.getSystemService(Context.LAYOUT_INFLATER_SERVICE);
row = inflater.inflate(R.layout.single_row, parent, false);
holder = new MyViewHolder(row);
row.setTag(holder);
} else {
holder = (MyViewHolder) row.getTag();
}
holder.myImage.setImageResource(images[position]);
holder.myTitle.setText(titlesArray[position]);
holder.myDescription.setText(descrptionArray[position]);
holder.box.setOnCheckedChangeListener(this);
return row;
}

@Override
public void onCheckedChanged(CompoundButton buttonView, boolean isChecked) {
if(isChecked){
int position = (Integer)buttonView.getTag();
Toast.makeText(getContext(), ""+position, Toast.LENGTH_SHORT).show();
}
}
}

我的 list 有 20 项。现在,如果我选中一个复选框,应用程序会自动选中其他 2 个复选框!请帮忙!

最佳答案

您可以将位置设置为复选框上的标记。

holder.box.setTag(position);

并在您的监听器中检索:

int position = (Integer)buttonView.getTag();

关于android - 带复选框的 ListView Holder,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/23706308/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com