2011-07-28 8 views
3

私はSimpleAdapterを使ってListViewを埋めようとしましたが、失敗しただけです。Android:ListViewとSimpleAdapterについて

多くのケースを読んだことがありますが、それでも便利な方法はありません。

ここにコードがあります。私は何が問題なのだろうか。

ArrayList<HashMap<String,Object>> listdata=new ArrayList<HashMap<String,Object>>(); 

    for (int i=0;i<3;i++){ 
     HashMap<String, Object> hm = new HashMap<String, Object>(); 
     hm.put("title", "title"); 
     hm.put("context", "context"); 

     listdata.add(hm); 
    } 

    String[] from = {"title", "context"}; 
    int[] to={R.id.title,R.id.context}; 

    SimpleAdapter adapter = new SimpleAdapter(this, listdata, R.layout.list_item, from, to); 
    ListView lv=(ListView)this.findViewById(R.id.listView1); 
    lv.setAdapter(adapter); 

list_item

<LinearLayout 
<ListView android:layout_height="wrap_content" android:id="@+id/listV1" android:layout_width="match_parent"> 
<LinearLayout> 
<TextView android:layout_height="wrap_content" android:id="@+id/title" android:text="TextView" android:layout_width="wrap_content" android:textAppearance="?android:attr/textAppearanceLarge"></TextView> 
<TextView android:text="TextView" android:id="@+id/context" android:layout_width="wrap_content" android:layout_height="wrap_content"></TextView> 
</LinearLayout> 
</ListView> 

ための//コード誰でも助けることができる場合、私は感謝します!

+1

2つのレイアウトファイルで質問を更新できますか?投稿したXMLが不適切なカット&ペーストに見える – Rob

+0

例外を投稿することはできますか? – Jack

答えて

3

私は問題があなたのXMLを使用している疑いがある、リスト項目のための第2のレイアウトファイルを宣言してみてください。例えば

your_activity.xml:

<?xml version="1.0" encoding="utf-8"?> 
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" 
    android:orientation="vertical" 
    android:layout_width="fill_parent" 
    android:layout_height="fill_parent" 
    > 
    <ListView android:layout_height="wrap_content" android:id="@+id/listView1" android:layout_width="fill_parent" /> 
</LinearLayout> 

とlist_item.xml:

<?xml version="1.0" encoding="utf-8"?> 
<LinearLayout 
    xmlns:android="http://schemas.android.com/apk/res/android" 
    android:orientation="vertical" 
    android:layout_width="fill_parent" 
    android:layout_height="fill_parent"> 
    <TextView android:layout_height="wrap_content" android:id="@+id/title" android:text="TextView" android:layout_width="wrap_content" android:textAppearance="?android:attr/textAppearanceLarge"></TextView> 
    <TextView android:text="TextView" android:id="@+id/context" android:layout_width="wrap_content" android:layout_height="wrap_content"></TextView>  
</LinearLayout> 

あなたのコードは、[OK]を見て、あなたは上記の二つのレイアウトファイルを使用する場合、正しく動作するはずです。

+1

あなたのコメントをありがとう。これは本当に私がlist_itemを変更した後に動作します –

1

私は常にリスト項目を別々のxmlファイルに入れました。おそらく、あなたのLinearLayoutを2つのTextViewsをファイルに入れてみてください(多分listrow.xmlと呼んでください)。例として

:ここ

がリストアイテム(list_stat_item.xml)である:

<LinearLayout android:id="@+id/LinearLayout01" 
    android:layout_width="fill_parent" android:layout_height="wrap_content" 
    android:orientation="vertical" xmlns:android="http://schemas.android.com/apk/res/android"> 

    <ListView android:id="@android:id/list" android:layout_width="fill_parent" 
     android:layout_height="0dip" android:layout_weight="1" 
     android:transcriptMode="normal" android:divider="@drawable/list_divider" 
     android:dividerHeight="1px" /> 


</LinearLayout> 

そしてここ:

<LinearLayout android:id="@+id/LinearLayout01" 
    android:layout_width="fill_parent" android:layout_height="fill_parent" 
    android:orientation="horizontal" xmlns:android="http://schemas.android.com/apk/res/android"> 

    <TextView android:text="" android:id="@+id/txtKey" 
     android:layout_width="wrap_content" android:layout_height="wrap_content" 
     android:padding="10dp" android:textSize="16sp"></TextView> 
    <TextView android:text="" android:id="@+id/txtValue" 
     android:layout_width="wrap_content" android:layout_height="wrap_content" 
     android:padding="10dp" android:textSize="16sp"></TextView> 

</LinearLayout> 

そしてここでは、メインビュー(view_stats.xml)であります

ArrayListを作成し、項目を追加してカスタムアダプタにバインドします。あなたは(StatListAdapterはArrayAdapterを拡張)アダプタのコードを表示したい場合は

ArrayList<StatItem> lst = new ArrayList<StatItem>(); 

     lst.add(new StatItem("Current Week: ", String.valueOf(currentWeek))); 
     lst.add(new StatItem("Weeks Left: ", String.valueOf(GeneralUtils.daysUntilBirth(this, pregnancyID)/7))); 
     lst.add(new StatItem("Days Left: ", String.valueOf(GeneralUtils.daysUntilBirth(this, pregnancyID)))); 
     lst.add(new StatItem("Current Trimester: ", String.valueOf(currentTrimester))); 
     lst.add(new StatItem("Posts: ", String.valueOf(blogCount))); 
     lst.add(new StatItem("Baby Names: ", String.valueOf(babyNamesCount))); 



     getListView().setSelector(android.R.color.transparent); 
     StatListAdapter sa = new StatListAdapter(this, R.layout.list_stat_item, lst); 
     setListAdapter(sa); 

public class StatListAdapter extends ArrayAdapter<StatItem> 
    { 
     public ArrayList<StatItem> items; 
     public StatListAdapter(Context context, int textViewResourceId, ArrayList<StatItem> objects) { 
      super(context, textViewResourceId, objects); 
      this.items = objects; 

     } 

     public View getView(int position, View convertView, ViewGroup parent) 
     { 
      View v = convertView; 
      if (v == null) 
      { 
       LayoutInflater li = (LayoutInflater)getSystemService(Context.LAYOUT_INFLATER_SERVICE); 
       v = li.inflate(R.layout.list_stat_item, null); 

      } 
      StatItem i = items.get(position); 
      if (i != null) 
      { 
       TextView kt = (TextView)v.findViewById(R.id.txtKey); 
       TextView vt = (TextView)v.findViewById(R.id.txtValue); 

          kt.setText(i.key); 
          vt.setText(i.value); 

      } 


      return v; 

     } 

    } 
+0

あなたの努力をありがとう。あなたは本当に素晴らしい仕事をしています。これは、この問題の別の方法です。私は自分のfault.Itがlist_item.xmlによって引き起こされたことを発見しました。 –

関連する問題