AndroidのListViewの作り方


静的な値の場合

activity_main.xml
    <ListView
        android:id="@+id/list"
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:entries="@array/spice"
        />
strings.xml
<resources>
    <string name="app_name">ListBasic</string>
    <string-array name="spice">
        <item>胡椒</item>
        <item>ターメリック</item>
        <item>生姜</item>
        <item>コリアンダー</item>
        <item>ニンニク</item>
        <item>サフラン</item>
    </string-array>
</resources>

動的な生成

activity_main.xml
    <ListView
        android:id="@+id/list"
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        />
MainActivity.java
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);

        final ArrayList<String> data = new ArrayList<>();
        data.add("胡椒1");
        data.add("ターメリック1");
        data.add("コリアンダー1");
        data.add("生姜");
        data.add("にんにく");
        data.add("サフラン");

        ArrayAdapter<String> adapter = new ArrayAdapter<String>(
                this,
                android.R.layout.simple_expandable_list_item_1, data);
        ListView  list = (ListView) findViewById(R.id.list);
        list.setAdapter(adapter);
    }

イベント処理を追加する

MainActivity.java

list.setOnItemClickListener(
  new AdapterView.OnItemClickListener(){
  @Override
    public void onItemClick(AdapterView<?> adapterView, View view, int i, long l) {
      削除の場合//adapter.remove((String) ((TextView)view).getText());
      追加の場合//adapter.add("サフラン2");

    }
  }
);

長押しの場合は、こういうメソッドもある

list.setOnItemLongClickListener(
        new AdapterView.OnItemLongClickListener(){
            @Override
            public boolean onItemLongClick(AdapterView<?> adapterView, View view, int i, long l) {
                return false;
            }
        }
);

単一選択可能なリストを生成する

activity_main.xml
    <ListView
        android:id="@+id/list"
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:choiceMode="singleChoice"
        />
MainActivity.java
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);

        final ArrayList<String> data = new ArrayList<>();
        data.add("胡椒1");
        data.add("ターメリック1");
        data.add("コリアンダー1");
        data.add("生姜");
        data.add("にんにく");
        data.add("サフラン");

        final ArrayAdapter<String> adapter = new ArrayAdapter<String>(
                this,
                android.R.layout.simple_list_item_single_choice, data);
        ListView  list = (ListView) findViewById(R.id.list);
        list.setAdapter(adapter);

        list.setOnItemClickListener(
            new AdapterView.OnItemClickListener(){
                @Override
                public void onItemClick(AdapterView<?> adapterView, View view, int i, long l) {
                    CharSequence msg = ((TextView) view).getText();
                    Toast.makeText(MainActivity.this,
                            String.format("選択したのは%s", msg.toString()),
                            Toast.LENGTH_SHORT
                            ).show();

                }
            }
        );
    }