【问题标题】:Understanding ArrayAdapter used for Listview了解用于 Listview 的 ArrayAdapter
【发布时间】:2014-03-19 00:29:42
【问题描述】:

我正在为我的列表视图使用 ArrayAdapter,但有些东西我不太明白。这是我的代码示例

      class ListAdapter extends ArrayAdapter<Item> {

            public ListAdapter(Context context, ArrayList<Item> items) {
                super(context, R.layout.list_item, items);
            }


            @Override
            public View getView(int position, View convertView, ViewGroup parent) {

                View v = convertView;

                if (v == null) {
                    LayoutInflater vi;
                    vi = LayoutInflater.from(getContext());
                    v = vi.inflate(R.layout.list_item, null);
                }
                ...some code here....
            }
       }

我的问题是:如果我已经在“super”调用的构造函数中设置了它的 ID,为什么我需要在“getView”中膨胀布局。?在我通过“super”设置布局 ID 后,这个 ID 是否存储在 ArrayAdapter 中的某个位置?所以我不明白超级调用中的这个“资源ID”是什么......

感谢您的解释:) 最好的问候

【问题讨论】:

  • 您正在覆盖 getView。您会注意到您在构造函数中传递的值实际上完全被忽略了。但是,您可以使用 v = super.getView(...) 之类的东西,而不是自己调用 inflate。

标签: android listview android-arrayadapter


【解决方案1】:

当您想在列表视图中显示不同于文本的内容时,您需要覆盖 getView。当您想要显示带有文本的图像时的示例(您知道 Whatsapp?它是一个列表视图)。

如果你不需要它,也许你根本不需要重写 ArrayAdapter。只需按原样使用课程并停止。您可以使用任何您想要的对象,ArrayAdapter 将使用传递的类的toString() 来显示文本。

ArrayAdapter<Items> adapter = new ArrayAdapter<Items> ();
listView.setAdapter (adapter);

使用Items.toString() 说出您想以文本形式显示的内容。

【讨论】:

  • 嗨,谢谢。我了解我需要覆盖它以显示自定义内容。但我不明白的是,如果它从未使用过,它是“super()”中资源 ID 的参数。即使它是相同的,我稍后会在 getView() 中膨胀
  • 默认getView方法使用。如果你不覆盖它,你已经有一个工作的 getView。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2011-02-26
相关资源
最近更新 更多