Привет, ребята, у меня есть список, который использует настраиваемый макет строки. Макет состоит из 2 ярлыков, изображения и флажка.Просмотр событий внутри строки ListView
Я пытаюсь запустить слушателя, когда флажок установлен. Слушатель я написал работы, но вместо того, чтобы стрелять для отдельной строки, он запускается для каждой отдельной строки в списке. Как если бы я установил флажок в своей первой строке, диалог откроется и будет работать правильно, однако 2, 3 и 4 строки также будут «стрелять».
Вот соответствующая область моего кода:
public View getView(int position, View convertView, ViewGroup parent) {
View v = convertView;
if (v == null) {
LayoutInflater vi = (LayoutInflater) getContext().getSystemService(
Context.LAYOUT_INFLATER_SERVICE);
v = vi.inflate(R.layout.row, null);
}
final item o = items.get(position);
if (o != null) {
TextView tt = (TextView) v.findViewById(R.id.name);
TextView bt = (TextView) v.findViewById(R.id.game);
CheckBox cb = (CheckBox) v.findViewById(R.id.caught);
if (cb != null && o.getStatus()) {
cb.setChecked(true);
} else {
cb.setChecked(false);
}
if (tt != null) {
tt.setText(o.getName());
}
if (bt != null && o.getStatus()) {
bt.setText("Game: " + o.getGame());
}
cb.setOnCheckedChangeListener(new OnCheckedChangeListener() {
@Override
public void onCheckedChanged(CompoundButton buttonView,
boolean isChecked) {
o.setStatus(isChecked);
if (isChecked) {
AlertDialog.Builder builder2 = new AlertDialog.Builder(
context);
builder2.setTitle("What game are we talkin gabout?");
builder2.setItems(Checklist.GAMES,
new DialogInterface.OnClickListener() {
public void onClick(DialogInterface dialog,
int item) {
Toast.makeText(context,
Checklist.GAMES[item],
Toast.LENGTH_SHORT).show();
o.setGame(Checklist.GAMES[item]);
o.setStatus(true);
me.notifyDataSetChanged();
}
});
builder2.show();
} else {
o.setGame("");
o.setStatus(false);
me.notifyDataSetChanged();
}
}
});
}
return v;
}
Есть ли более подходящее место, чтобы создать свой приемник для флажка?
ли вы имеете в виду, что onCheckedChanged() вызывается для каждой строки - после того, как один клик? – DJC
Да, не имеет значения, в какую строку они все будут звонить. – Vizirship