ListView を使う|Android開発
AndroidでListView
の基本的な使い方です。
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);
}
}
フラグメントで使用する場合
フラグメントの場合は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();
}
}
フラグメント内でのメソッドコール順序
onActivityCreated()
は以下の順番でコールされます。
onAttach(activity)
onAttach(context)
onCreate()
onCreateView()
onActivityCreated()
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
だと長押し時に
onItemLongClick()
onItemClick()
の順でコールされます。長押し時にクリックイベントは不要の場合は、onItemLongClick()
の戻り値をtrue
にします。