Ich muss eine Liste der Kategorien aus einer ListActivity anzeigen. Meine Datenquelle ist eine ArrayList des Typs Category
, die die android Parcelable-Schnittstelle implementiert. Die Struktur ist unten angegeben. es hat eine ID und einen TitelAndroid ListActivity mit ArrayList von Objekten als Layout-Ressource
I Titel als Liste Text angezeigt werden muß und auf den Listeneintrag klicken, ich brauche die ID für die weitere Verarbeitung erhalten
Es ist möglich, eine neue Reihe von "zu schaffen Titel durch die Kategorie Arraylist iterieren und verwenden this.setListAdapter(new ArrayAdapter<String>(this, R.layout.rowlayout, R.id.label, names));
Aber bu dieser Methode i nur den Titel der Kategorie auf Klick erhalten wird und nicht die id.
Ist es möglich, die ArrayList von Objekten direkt als Datenquelle zu verwenden?
public class CategoryList extends ListActivity {
public void onCreate(Bundle icicle) {
super.onCreate(icicle);
Intent t = new Intent(this, ParsingWebXML.class);
startActivityForResult(t,1);
}
protected void onActivityResult(int requestCode, int resultCode, Intent data) {
if(requestCode == 1 && resultCode == RESULT_CANCELED){
finish();
} else {
createCategoryList(data);
}
}
private void createCategoryList(Intent data) {
ArrayList<Category> categories = null;
try {
categories = data.getParcelableArrayListExtra("categoryList");
Iterator<Category> itr = categories.iterator();
String[] names = new String[categories.size()];
int i=0;
while (itr.hasNext()) {
Category c = itr.next();
names[i++] = c.getTitle();
}
this.setListAdapter(new ArrayAdapter<Category>(this, R.layout.rowlayout, R.id.label, categories));
// String[] names = new String[] { "Sports", "Mediacal", "Computers" };
// this.setListAdapter(new ArrayAdapter<String>(this, R.layout.rowlayout, R.id.label, names));
} catch (Exception e) {
// TODO: handle exception
}
}
@Override
protected void onListItemClick(ListView l, View v, int position, long id) {
super.onListItemClick(l, v, position, id);
// Get the item that was clicked
Object o = this.getListAdapter().getItem(position);
String keyword = o.toString();
if(keyword=="Categories"){
Intent cat = new Intent(this, CategoryActivity.class);
startActivity(cat);
//Toast.makeText(this, keyword, Toast.LENGTH_LONG).show();
} else {
Intent cat = new Intent(this, CategoryActivity.class);
startActivity(cat);
}
}
}
Category.java
public class Category implements Parcelable {
private int id;
private String title;
public Category() {
}
public Category(Parcel source) {
id = source.readInt();
title = source.readString();
}
public void setId(int id) {
this.id = id;
}
public void setTitle(String title) {
this.title = title;
}
public int getId() {
return this.id;
}
public String getTitle() {
return this.title;
}
@Override
public int describeContents() {
return 0;
}
@Override
public void writeToParcel(Parcel dest, int flags) {
dest.writeInt(id);
dest.writeString(title);
}
public static final Parcelable.Creator CREATOR = new Parcelable.Creator() {
@Override
public Category createFromParcel(Parcel source) {
return new Category(source);
}
@Override
public Category[] newArray(int size) {
return new Category[size];
// TODO Auto-generated method stub
}
};
}