ListView関連の備忘録

xmlに定義したからListViewに値を引き渡す

まずはJavaコードで受け取る
array.xml

 
	first
	second
	thrid
 

の受け取り

String[] student_id = getResources().getStringArray(R.array.student_id);

ListViewに表示する方法は4つに分かれます。

  • android:entriesとandroid:entryValuesを使う
  • ListActivityを拡張しgetView()メソッドを実装しない
  • Activityを拡張しgetView()メソッドを実装しない
  • getView()メソッドを実装する

android:entriesとandroid:entryValuesを使う

ListPreferenceを使っている場合には下記のような記述で値を受け取れる。メリットはJavaのコードをいじる必要がない。

 

ListActivityを拡張しgetView()メソッドを実装しない

main.xml


	

student_list.xml



StudentListActivity

public class StudentListActivity extends ListActivity {
    /** Called when the activity is first created. */
    @Override
    public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.main);
        
        ArrayAdapter adapter = new ArrayAdapter
           (this, R.layout.student_list, getResources().getStringArray(R.array.student_id));
        this.setListAdapter(adapter);
    }
}

student_list.xmlを記述しようとしたがエラーが出てうまく動かなかった。

01-07 23:28:37.257: ERROR/ArrayAdapter(431): You must supply a resource ID for a TextView
01-07 23:28:37.286: ERROR/AndroidRuntime(431): java.lang.IllegalStateException: ArrayAdapter requires the resource ID to be a TextView

ArrayAdapterを作成するときのエラー解決メモ - 整理できない底辺プログラマのメモブログによるとOrientationがVerticalの場合にはエラーになるらしい。しかし今回は android:orientation="vertical"を外してもエラーになる。またデフォルトはHorizontalらしい。

Activityを拡張しgetView()メソッドを実装しない

main.xml


	

student_list.xml

  • 変更ありません

StudentListActivity.java

public class StudentListActivity extends ListActivity {
    /** Called when the activity is first created. */
    @Override
    public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.main);
        
        ArrayAdapter adapter = new ArrayAdapter
           (this, R.layout.student_list, getResources().getStringArray(R.array.student_id));

        ListView listView = (ListView) findViewById(R.id.lv_student);
        
        // アダプターを設定します
        listView.setAdapter(adapter);
    }
}