ListView を使う|Android開発

AndroidListViewの基本的な使い方です。

ListView を使って文字列のリストを表示する方法

レイアウトファイル

シンプルにリストビューを1つ配置したレイアウトファイルです。

<?xml version="1.0" encoding="utf-8"?>
<android.support.constraint.ConstraintLayout
    xmlns:android="http://schemas.android.com/apk/res/android"
    android:layout_width="match_parent"
    android:layout_height="match_parent">

    <LinearLayout
        android:layout_width="match_parent"
        android:layout_height="match_parent"
        android:orientation="vertical">
        <ListView
            android:id="@+id/list_view_normal"
            android:layout_width="match_parent"
            android:layout_height="wrap_content" />
    </LinearLayout>

</android.support.constraint.ConstraintLayout>

Activityで使用する場合

onCreate()ListAdapterを設定し、リストアイテムを設定します。今回はリストアイテムとして文字列の配列を設定しています。

public class ListActivity extends AppCompatActivity {
    private final String[] mmItems = new String[] { "List item 1", "List item 2", "List item 3" };

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.list_layout);

        ListView listView = findViewById(R.id.list_view_normal);
        ArrayAdapter<String> arrayAdapter = new ArrayAdapter<>(getApplicationContext(), android.R.layout.simple_list_item_1, mmItems);
        listView.setAdapter(arrayAdapter);
    }
}
ListView

フラグメントで使用する場合

フラグメントの場合はonActivityCreated()ListAdapterを設定し、リストアイテムを設定します。

public class ListViewFragment extends Fragment {
    private static final String TAG = "ListViewFragment";

    private final String[] mmItems = new String[] { "List item f1", "List item f2", "List item f3" };

    @Override
    public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
    }

    @Override
    public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) {
        return inflater.inflate(R.layout.list_layout, container, false);
    }

    @Override
    public void onActivityCreated(Bundle savedInstanceState) {
        super.onActivityCreated(savedInstanceState);

        ListView listView = getActivity().findViewById(R.id.list_view_normal);
        ArrayAdapter<String> arrayAdapter = new ArrayAdapter<>(getActivity().getApplicationContext(), android.R.layout.simple_list_item_1, mmItems);
        listView.setAdapter(arrayAdapter);
    }

    @Override
    public void onAttach(Context context) {
        super.onAttach(context);
    }

    @Override
    public void onAttach(Activity activity) {
        super.onAttach(activity);
    }

    @Override
    public void onDetach() {
        super.onDetach();
    }

    @Override
    public void onResume() {
        super.onResume();
    }

    @Override
    public void onPause() {
        super.onPause();
    }
}
ListView

フラグメント内でのメソッドコール順序

onActivityCreated()は以下の順番でコールされます。

  1. onAttach(activity)
  2. onAttach(context)
  3. onCreate()
  4. onCreateView()
  5. onActivityCreated()
  6. onResume()

リストアイテムのクリックを取得する

リストビューのsetOnItemClickListener()AdapterView.OnItemClickListener実装クラスを指定します。
AdapterView.OnItemClickListener実装クラスのonItemClick()でクリックイベントを受信します。

public class ListViewFragment extends Fragment
    implements AdapterView.OnItemClickListener {
    private final String[] mmItems = new String[] { "List item f1", "List item f2", "List item f3" };

    @Override
    public void onActivityCreated(Bundle savedInstanceState) {
        super.onActivityCreated(savedInstanceState);

        ListView listView = getActivity().findViewById(R.id.list_view_normal);
        ArrayAdapter<String> arrayAdapter = new ArrayAdapter<>(getActivity().getApplicationContext(), android.R.layout.simple_list_item_1, mmItems);
        listView.setAdapter(arrayAdapter);

        listView.setOnItemClickListener(this);
    }

    @Override
    public void onItemClick(AdapterView<?> parent, View view, int position, long id) {
        // id はデータベース時のみ. 通常は positionと同じ値.
        String text = "onItemClick:" + parent.getAdapter().getItem(position);
        Toast.makeText(getContext(), text, Toast.LENGTH_SHORT).show();
    }
}

リストアイテムの長押しを取得する

リストビューのsetOnItemLongClickListener()AdapterView.OnItemLongClickListener実装クラスを指定します。
AdapterView.OnItemLongClickListener実装クラスのonItemLongClick()で長押しイベントを受信します。

public class ListViewFragment extends Fragment
    implements AdapterView.OnItemLongClickListener {
    private final String[] mmItems = new String[] { "List item f1", "List item f2", "List item f3" };

    @Override
    public void onActivityCreated(Bundle savedInstanceState) {
        super.onActivityCreated(savedInstanceState);

        ListView listView = getActivity().findViewById(R.id.list_view_normal);
        ArrayAdapter<String> arrayAdapter = new ArrayAdapter<>(getActivity().getApplicationContext(), android.R.layout.simple_list_item_1, mmItems);
        listView.setAdapter(arrayAdapter);

        listView.setOnItemLongClickListener(this);
    }

    @Override
    public boolean onItemLongClick(AdapterView<?> parent, View view, int position, long id) {
        String text = "onItemLongClick:" + parent.getAdapter().getItem(position);
        Toast.makeText(getContext(), text, Toast.LENGTH_SHORT).show();
        return true;
    }
}

クリックイベントと長押しイベントを受信するようにした場合、onItemLongClick()の戻り値がfalseだと長押し時に

  1. onItemLongClick()
  2. onItemClick()

の順でコールされます。長押し時にクリックイベントは不要の場合は、onItemLongClick()の戻り値をtrueにします。

このエントリーをはてなブックマークに追加
にほんブログ村 IT技術ブログへ

コメント

メールアドレスが公開されることはありません。 が付いている欄は必須項目です