2013-03-08 7 views
19

私はオブジェクトのarraylistからのデータで人の名前と住所のリストを表示するリストアを持っています。ここまでリストビューを埋める方法があります。オブジェクトのarraylistからリストビューを取り込む

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

人物のクラスは店舗の名前と人物の住所です。

public class Person { 
    String name; 
    String address; 
} 

私のリストビューのための私のListItemが2つのTextViewで構成されますが、このように:

<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" /> 

私は一人一人の名前とアドレスの両方を表示するには、私のリストビューの各項目をしたいです。誰か助けてもらえますか?あなたの活動で

事前のおかげで、そして私の悪い英語のため申し訳ありません...

+0

Googleカスタムリストビューで検索... – Pragnani

+0

'onCreate'メソッドを使用できます。この場合、それはプログラマで使用可能であろう。ところで – user7275835

答えて

25

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

//then populate myListItems 

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

アダプタは

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

、なぜAdapterPersonの2番目のパラメータが0ですか? – djargonforce

2

これは、カスタムに私の解決策でありますリストアダプターの問題。 まずカスタム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; 
    } 
} 

}

と活動ののonCreateメソッド内:

、その後、私はこのような呼び出しでフェッチいくつかの後にアダプタを埋める:

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

これをソリューションに適用するには、独自のcustomadapter、そして私のオブジェクトMemoEntryの代わりにPersonクラスを使用してください。 getViewメソッドでは、必要に応じて変更します。それは私がやっていることと同じくらいです。

これはちょっと役立ちます。

関連する問題