2013-03-08 25 views
19

Mam listę, która wyświetli listę nazwisk i adresów osób z danymi z tablicy obiektów. oto metoda wypełniania listy do tej pory ..Wypełnianie widoku listy z listy obiektów

private void fillData(ArrayList<Person> messages) { 
    //populating list should go here 
} 

Klasa osoby zawiera nazwę i adres osoby.

public class Person { 
    String name; 
    String address; 
} 

Chociaż moja listitem dla mojego ListView składają się z dwóch TextView, tak:

<TwoLineListItem xmlns:android="http://schemas.android.com/apk/res/android" 
android:layout_width="fill_parent" 
android:layout_height="wrap_content" 
android:minHeight="?android:attr/listPreferredItemHeight" 
android:mode="twoLine" 
android:clickable="false" 
android:paddingBottom="9dp" 
android:paddingTop="5dp" > 

<TextView 
    android:id="@+id/display_name" 
    android:layout_width="match_parent" 
    android:layout_height="wrap_content" 
    android:layout_marginLeft="10dp" 
    android:textAppearance="?android:attr/textAppearanceLarge" /> 

<TextView 
    android:id="@+id/display_number" 
    android:layout_width="match_parent" 
    android:layout_height="wrap_content" 
    android:layout_alignLeft="@+id/display_name" 
    android:layout_below="@+id/display_name" 
    android:textAppearance="?android:attr/textAppearanceSmall" /> 

Chcę każdego elementu w moim ListView do wyświetlania zarówno nazwę i adres każdej osoby. Czy ktoś może ci pomóc?

Z góry dziękuję i przepraszam za mój zły język angielski ...

+0

Wyszukaj w niestandardowym widoku listy google ... – Pragnani

+0

Możesz użyć metody 'onCreate'. W tym przypadku byłby użyteczny w programie. – user7275835

Odpowiedz

25

W swojej działalności

AdapterPerson adbPerson; 
ArrayList<Person> myListItems = new ArrayList<Person>(); 

//then populate myListItems 

adbPerson= new AdapterPerson (youractivity.this, 0, myListItems); 
listview.setAdapter(adbPerson); 

Adapter

public class AdapterPerson extends ArrayAdapter<Person> { 
    private Activity activity; 
    private ArrayList<Person> lPerson; 
    private static LayoutInflater inflater = null; 

    public AdapterPerson (Activity activity, int textViewResourceId,ArrayList<Person> _lPerson) { 
     super(activity, textViewResourceId, _lProducts); 
     try { 
      this.activity = activity; 
      this.lPerson = _lPerson; 

      inflater = (LayoutInflater) activity.getSystemService(Context.LAYOUT_INFLATER_SERVICE); 

     } catch (Exception e) { 

     } 
    } 

    public int getCount() { 
     return lPerson.size(); 
    } 

    public Product getItem(Product position) { 
     return position; 
    } 

    public long getItemId(int position) { 
     return position; 
    } 

    public static class ViewHolder { 
     public TextView display_name; 
     public TextView display_number;    

    } 

    public View getView(int position, View convertView, ViewGroup parent) { 
     View vi = convertView; 
     final ViewHolder holder; 
     try { 
      if (convertView == null) { 
       vi = inflater.inflate(R.layout.yourlayout, null); 
       holder = new ViewHolder(); 

       holder.display_name = (TextView) vi.findViewById(R.id.display_name); 
       holder.display_number = (TextView) vi.findViewById(R.id.display_number); 


       vi.setTag(holder); 
      } else { 
       holder = (ViewHolder) vi.getTag(); 
      } 



      holder.display_name.setText(lProducts.get(position).name); 
      holder.display_number.setText(lProducts.get(position).number); 


     } catch (Exception e) { 


     } 
     return vi; 
    } 
} 
+0

przy okazji, dlaczego drugi parametr AdapterPerson ma wartość 0? – djargonforce

2

To jest moje rozwiązanie zwyczaju problem z listą kart. Pierwszy zwyczaj arrayadapter:

public class MemoListAdapter extends ArrayAdapter<MemoEntry> { 

private int layoutResourceId; 

private static final String LOG_TAG = "MemoListAdapter"; 

public MemoListAdapter(Context context, int textViewResourceId) { 
    super(context, textViewResourceId); 
    layoutResourceId = textViewResourceId; 
} 


@Override 
public View getView(int position, View convertView, ViewGroup parent) { 
    try { 
     MemoEntry item = getItem(position); 
     View v = null; 
     if (convertView == null) { 
      LayoutInflater inflater = (LayoutInflater) getContext().getSystemService(Context.LAYOUT_INFLATER_SERVICE); 

      v = inflater.inflate(layoutResourceId, null); 

     } else { 
      v = convertView; 
     } 

     TextView header = (TextView) v.findViewById(R.id.list_memo_item_header); 
     TextView description = (TextView) v.findViewById(R.id.list_memo_item_text); 

     header.setText(item.getHeader()); 
     description.setText(item.getValue()); 

     return v; 
    } catch (Exception ex) { 
     Log.e(LOG_TAG, "error", ex); 
     return null; 
    } 
} 

}

iw sposobie onCreate działalności:

a potem wypełniam zasilacz po kilku ściągam z połączenia tak:

ArrayList<MemoEntry> memoList = new ArrayList<MemoEntry>(); //here you should use a list with some content in it 
adapter.addAll(memoList); 

Aby dostosować to do swojego rozwiązania, stwórz własne customadapter, a zamiast mojego obiektu MemoEntry użyj swojej klasy Person. W metodzie getView zmień ją odpowiednio do swoich potrzeb. To mniej więcej to, co robię, nie powinno być zbyt trudne.

Mam nadzieję, że to pomoże tobie!

Powiązane problemy