Wenn wir den Listener während convertview==null
platzieren, heißt das nicht, dass wir keinen neuen Listener für die entsprechenden überhöhten Ansichten erstellen können, wenn die Anzahl der darstellbaren Anzeigen nicht mehr ausreicht? Ist es auch möglich, die Variable einer Ansicht position
in einem Adapter statt in einer Viewholder
Klasse zu deklarieren?Soll der Listener innerhalb (conversionview == null) oder außerhalb des bedingten Blocks registriert werden? [ANDROID]
Beispielcode aus this website:
class ExampleAdapter extends ArrayAdapter<String> {
private List<String> mData;
public ExampleAdapter(Context context, List<String> objects) {
super(context, 0, objects);
mData = objects;
}
@Override
public View getView(final int position, View convertView, ViewGroup parent) {
final ViewHolder holder;
if (convertView == null) {
convertView = LayoutInflater.from(getContext()).inflate(R.layout.simple_list_item_1, parent, false);
holder = new ViewHolder();
holder.textView = (TextView) convertView;
convertView.setTag(holder);
holder.textView.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
Toast.makeText(getContext(), "Clicked in '" + mData.get(holder.position) + "'", Toast.LENGTH_SHORT).show();
}
});
} else {
holder = (ViewHolder) convertView.getTag();
}
holder.textView.setText(mData.get(position));
holder.position = position;
return convertView;
}
static class ViewHolder {
public TextView textView;
public int position;
}
}
Wenn also die Ansicht wiederverwendet wird und das Ereignis onClick ausgelöst wird, ist die Listener-Registrierung immer noch relevant und ruft den vorhandenen registrierten Listener auf, jedoch mit anderen Daten, die durch die Variable ViewHolder.position möglich sind. –
Auch wenn ich den Hörer nur nach draußen bewegen würde (obwohl in der Praxis nicht empfohlen), wird es immer noch keinen Unterschied in Bezug auf die Ausgabe geben, habe ich recht? –
@Mr_RexZ korrekt. Das einzige, was Sie nicht tun müssen, ist, das Beispiel zu ändern, das Sie in 'mData.get (position)' veröffentlicht haben, weil die Position nicht mehr übereinstimmen würde, wenn sie einmal recycelt wurde. – zapl