android - 如何将 ImageView 数组添加到 ListView 的 ArrayAdapter

标签 android listview

我有一个自定义的行布局,其中包含用于 ListView 的 Imageview 和 TextView。 我可以将表示每一行的字符串数组添加到 ArrayAdater,但在填充行 ImageView 时遇到问题。

我尝试创建一个 ImageView 数组并按如下方式添加到 ArrayAdaptor(因为我看不到将两个数组作为参数的 ArrayAdpter 构造函数):

// a string array holding the list items
    String classes[] = { "My Profile", "Splash", "Log A Dive", "Search Dives",
            "Weather: Magic Seaweed", "Irish Tides", "International Tides", "Dive PLanner" };// each class is a menu Actiitem

    ImageView images[]={(ImageView) findViewById(R.drawable.logdive),(ImageView) findViewById(R.drawable.logdive2),
            (ImageView) findViewById(R.drawable.logdive3),
            (ImageView) findViewById(R.drawable.search),(ImageView) findViewById(R.drawable.weather),
            (ImageView) findViewById(R.drawable.tides),(ImageView) findViewById(R.drawable.tides)
            ,(ImageView) findViewById(R.drawable.logdive3)};

ArrayAdapter listadaptor = new ArrayAdapter<String>(MainMenu.this,
                R.layout.single_list_row, R.id.title, classes);
        listadaptor.add(images);
setListAdapter(cutsomAdaptor);

Logcat 堆栈跟踪:

01-02 05:10:45.480: E/AndroidRuntime(891): java.lang.RuntimeException: Unable to instantiate activity ComponentInfo{com.mooney.diveapp/com.mooney.diveapp.MainMenu}: java.lang.NullPointerException

最佳答案

适配器的要点是将一组数据链接到一组 View (由 AdapterView 创建,即 ListView)——您无需为其提供要使用的 View 数组。

在这种情况下,您需要覆盖填充布局的 ArrayAdapter 的 getView 方法。您需要一个既可以表示 String 又可以表示 int(对于可绘制资源 ID)的数据集,类似于 Pair (不理想但为了简单起见):

ArrayList<Pair<String, Integer>> classes = new ArrayList<Pair<String, Integer>>();
classes.add(Pair.create("My Profile", R.drawable.myProfile));
// add all items
ArrayAdapter listadaptor = new ArrayAdapter<Pair<String, Integer>>(MainMenu.this,
            R.layout.single_list_row, R.id.title, classes) {
    public View getView(int position, View convertView, ViewGroup container) {
        if(convertView == null) {
            convertView = LayoutInflator.from(getContext()).inflate(R.layout.single_list_row, container, false);
        }
        TextView title = (TextView) convertView.findViewById(R.id.title);
        Pair<String, Integer> item = getItem(position);
        title.setText(item.first);
        title.setCompoundDrawables(item.second, 0, 0, 0);
        return convertView;
    }
 };

关于android - 如何将 ImageView 数组添加到 ListView 的 ArrayAdapter,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20880841/

相关文章:

android:如何使用 am 从命令行启动 native Activity ?

java - 从 List<Object> 填充 ListView

android - Fragment 中的 Listview 没有扩展 ListFragment

android - 如何在 ListView 中的每个第 n 个位置显示一个 AdView

android - 我的应用或其依赖项是否违反了 Android 广告 ID 政策?

android - 单击通知以转到当前 Activity

android - 如何禁用外部触摸以隐藏 DialogPreference

java - 具有更改操作栏操作的可标记 ListView

android - 如何在下载 .mp4 视频时更新进度条?

java - `Caused by: java.lang.RuntimeException: view must have a tag` 的实际含义是什么?