Zugriff auf benutzerdefinierte Objekte in einer listview
Ich bin derzeit der Aufbau einer Anwendung, die eine Anforderung gesendet wird in das web, das Ergebnis wird dann geparst und in ein ArrayList mit Objekten.
diese Liste dann füllt das ListView.
Ich will erstellen Sie eine onClickListener
dass wird mir erlauben, zu wissen, welches Objekt geklickt wurde, aber ich kann nicht finden den richtigen Weg, diese auch umzusetzen.
entweder zuweisen des onClick-das ListView in der ursprünglichen Aktivität, oder weisen Sie den Hörer innerhalb der getView
- Funktion in der custom-adapter.
es scheint mir, wie die Zuordnung der Hörer in der getView
hat zu viel overhead.
wie funktioniert es? was ist besser?
code für die main-Aktivität:
public class NoPicList extends Activity {
ListView list;
NoPicAdapter adapter;
ProgressDialog mDialog;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.no_pic_list);
list = (ListView) findViewById(R.id.noPicListView);
Bundle b = getIntent().getExtras();
String request = b.getString("REQUEST");
mDialog = new ProgressDialog(this);
mDialog.setCancelable(false);
mDialog.setMessage("Lodaing Data");
mDialog.show();
new GetNewsAndCalendar().execute(request);
}
@Override
protected void onPause() {
mDialog.dismiss();
super.onPause();
}
class GetNewsAndCalendar extends
AsyncTask<String, Void, ArrayList<Message>> {
@Override
protected ArrayList<Message> doInBackground(String... params) {
String url = params[0];
DOMFeedParser parser = new DOMFeedParser(url);
return parser.parse();
}
@Override
protected void onPostExecute(ArrayList<Message> result) {
adapter = new NoPicAdapter(NoPicList.this, result);
list.setAdapter(adapter);
//FIRST OPTION TO INSERT onClickListener
mDialog.dismiss();
}
} //end of GetNewsAndCalendar
}
code für die Liste-adapter:
public class NoPicAdapter extends BaseAdapter {
private ArrayList<Message> data;
private Activity mActivity;
private LayoutInflater inflater = null;
public NoPicAdapter(Activity a, ArrayList<Message> result) {
mActivity = a;
data = result;
inflater = (LayoutInflater) mActivity
.getSystemService(Context.LAYOUT_INFLATER_SERVICE);
}
@Override
public int getCount() {
return data.size();
}
@Override
public Object getItem(int position) {
return position;
}
@Override
public long getItemId(int position) {
return position;
}
@Override
public View getView(int position, View convertView, ViewGroup parent) {
View vi = convertView;
if (convertView == null)
vi = LayoutInflater.from(mActivity).inflate(R.layout.no_pic_list_item,
null);
TextView title = (TextView) vi.findViewById(R.id.noPicTitle);
TextView subtitle = (TextView) vi.findViewById(R.id.noPicSubtitle);
title.setText(data.get(position).getTitle());
subtitle.setText(data.get(position).getDate());
//SECOND PLACE TO INSERT THE onClickListener
return vi;
}
}
Du musst angemeldet sein, um einen Kommentar abzugeben.
Als pro mein Anliegen, weisen die onClick, um die ListView in die ursprüngliche Aktivität ist eine gute Idee, dann eher die Zuordnung zu in
getView()
Ihre eigene adapter. Weil ingetView()
des Adapters ist es, immer eine neue Ansicht.onClick()'s Objekt..setOnItemSelectedListener
? für das, was?onClickListener
bekomme keineonItemSelectedListener
. dafür hat es einonItemSelectedListener
Stimmen mit user370305's Antwort.
Müssen Sie nur umsetzen
OnItemClickListener
in der Activity-Klasse, nach der Erstellung erhalten Sie onItemClick-Methode, im inneren, dass Sie position des angeklickten Objekts.getItem(position)
ist gonna umgesetzt werden, gerade jetzt, habe ich noch nicht implementiert, die es noch...