2013-03-08 1 views
19

오브젝트의 arraylist로부터의 데이터로 사람 이름 및 주소 목록을 표시하는 listactivity가 있습니다. 여기오브젝트의 arraylist에서 listview 채우기

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

사람 클래스는 상점 이름과 사람의 주소입니다 .. 지금까지 목록보기를 채울 수있는 방법입니다. 이 같은

public class Person { 
    String name; 
    String address; 
} 

내 목록보기 내을 listitem 두 개의 텍스트 뷰 구성하는 동안

는 :

<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의 두 번째 매개 변수가 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 메소드에서 필요에 맞게 변경하십시오. 내가하는 일이 너무 힘들어서는 안된다.

희망이 조금 도움이 되었어요!