2010-11-25 6 views
1

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 
     } 

    }; 

} 

Antwort

3

ArrayAdapter<T> verlängern und erweitern sie getView() Methode ist. Lass es eine Ansicht deiner Wahl zurückgeben.

Dann verwenden Sie es als MyArrayAdapter<Category>.