ListView のためのActivityとしてリスト表示専用のアクティビティであるListActivityクラス使う方法があります。 ただし、API30で非推奨となりました。
ListActivity
(注)  ListActivityによるとこのAPI 30から非推奨となりました。
サンプルコード
簡単にListActivityを使ってみます。
ListViewオブジェクトを既に含んだListActivityを使っているので、新たにListViewのインスタンスを生成して、アクティビティにセットする必要がありません。
setAdapter() ではなく setListAdapter() を使います
![[Android] ListActivity の使い方 1x1.trans - [Android] ListActivity の使い方](https://akira-watson.com/wp-content/themes/simplicity2/images/1x1.trans.gif)
CellData class にて画像とテキストを子要素として設定します。
以下を参考にさせていただきました。
Android GridView でアイコンと文字のレイアウト
MainActivity.java
| 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 | //package your.package.name; import androidx.annotation.NonNull; import android.app.ListActivity; import android.content.Context; import android.os.Bundle; import android.view.LayoutInflater; import android.view.View; import android.view.ViewGroup; import android.widget.ArrayAdapter; import android.widget.ImageView; import android.widget.TextView; import java.util.ArrayList; import java.util.List; public class MainActivity extends ListActivity {     // itemのアイコンと名前を保持するクラス     class CellData {         String imageComment;         int imageDrawableId;         CellData(String imageComment, int imageDrawableId) {             this.imageComment = imageComment;             this.imageDrawableId = imageDrawableId;         }     }     // Android が持っているシステムアイコン     private Integer[] imageDrawables = {             android.R.drawable.ic_menu_call,             android.R.drawable.ic_menu_close_clear_cancel,             android.R.drawable.ic_menu_compass,             android.R.drawable.ic_menu_crop,             android.R.drawable.ic_menu_delete,             android.R.drawable.ic_menu_directions,             android.R.drawable.ic_menu_gallery,             android.R.drawable.ic_menu_edit,             android.R.drawable.ic_menu_help,     };     private String[] imageComments = {             "call", "cancel", "compass", "crop", "delete",             "directions", "gallery","edit","help"     };     @Override     protected void onCreate(Bundle savedInstanceState) {         super.onCreate(savedInstanceState);         setContentView(R.layout.activity_main);         List<CellData> list = new ArrayList<>();         for (int i = 0; i < imageDrawables.length ; i++){             CellData data = new CellData(imageComments[i], imageDrawables[i]);             list.add(data);         }         setListAdapter(new ListViewAdapter(this, R.layout.list, list));     }     class ViewHolder {         TextView textView;         ImageView imageView;     }     // ArrayAdapterを継承したカスタムのアダプタークラス     class ListViewAdapter extends ArrayAdapter<CellData> {         private LayoutInflater inflater;         private int itemLayout;         CellData data;         ListViewAdapter(Context context, int itemLayout, List<CellData> list) {             super(context, 0, list);             this.inflater =                     (LayoutInflater) context.getSystemService(Context.LAYOUT_INFLATER_SERVICE);             this.itemLayout = itemLayout;         }         @Override         public @NonNull View getView(int position, View convertView, @NonNull ViewGroup parent) {             ViewHolder holder;             if (convertView == null) {                 convertView = inflater.inflate(itemLayout, parent, false);                 holder = new ViewHolder();                 holder.textView = convertView.findViewById(R.id.textView);                 holder.imageView = convertView.findViewById(R.id.imageView);                 convertView.setTag(holder);             } else {                 holder = (ViewHolder) convertView.getTag();             }             data = getItem(position);             if(data != null){                 holder.textView.setText(data.imageComment);                 holder.imageView.setImageResource(data.imageDrawableId);             }             return convertView;         }     } } | 
 
レイアウト
activity_main.xml
| 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 | <?xml version="1.0" encoding="utf-8"?> <LinearLayout     xmlns:android="http://schemas.android.com/apk/res/android"     xmlns:tools="http://schemas.android.com/tools"     android:padding="5dp"     android:orientation="vertical"     android:background="#666"     android:layout_width="match_parent"     android:layout_height="match_parent"     tools:context=".MainActivity">     <ListView         android:id="@android:id/list"         android:layout_width="match_parent"         android:layout_height="wrap_content" /> </LinearLayout> | 
list.xml
| 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 | <?xml version="1.0" encoding="utf-8"?> <LinearLayout     xmlns:android="http://schemas.android.com/apk/res/android"     android:layout_width="match_parent"     android:layout_height="100dp"     android:background="#888"     android:orientation="horizontal" >     <ImageView         android:id="@+id/imageView"         android:layout_height="100dp"         android:layout_width="135dp"         android:scaleType="fitCenter"         android:contentDescription="@string/description"/>     <TextView         android:id="@+id/textView"         android:layout_width="wrap_content"         android:layout_height="wrap_content"         android:layout_gravity="center"         android:layout_marginStart="30dip"         android:layout_marginEnd="0dip"         android:textSize="28sp"         android:textColor="#fff" /> </LinearLayout> | 
 
strings.xml
| 1 2 3 4 | <resources>     <string name="app_name">Your App Name</string>     <string name="description">android icon</string> </resources> | 
- ArrayAdapter
- ListView と ArrayAdapter 簡単なテキストリストの表示
- ArrayAdapterを使ってレイアウトをアレンジ
- ListActivity と ArrayAdapterで画像とテキストをリスト表示
- Basedapter
- BaseAdapterで画像とテキストをリスト表示
- ListViewリストをタップして画面遷移
- ListViewアイテムの移動、削除
- ListView アイテム個々の背景、高さなどを変える
References:
ListActivity
ArrayAdapter
