android - 关于从 ListView 中检索 View 的困惑

标签 android listview view colors android-arrayadapter

我试图在 Android 应用程序中创建一个简单的 ListView 并更改 View 的背景颜色。

我通过简单地覆盖已定义的 ArrayAdapter 类的 getView() 方法并在其中进行更改而成功。

ArrayAdapter<String> arrayAdapter = new ArrayAdapter<String>(this,
         android.R.layout.simple_list_item_1, Categories) {
  @Override
  public View getView(int pos, View v, ViewGroup vg) {
    View view = super.getView(pos, v, vg);

    switch (pos) {
      case 0:
        view.setBackgroundColor(Color.RED);
        break;
      case 1:
        view.setBackgroundColor(Color.BLUE);
        break;
      default:
        break;
    }

    return view;
  }
};

但是,如果我删除 switch 语句并在此函数之外使用返回 View ,颜色不会更新。我的意思是这样的:(lv 是我的 ListView)

lv.setAdapter(arrayAdapter);
for (int i=0; i<2; ++i) {
  View V = (View) lv.getAdapter().getView(i, null, lv);

  switch (i) {
    case 0:
      V.setBackgroundColor(Color.RED);
      break;
    case 1:
      V.setBackgroundColor(Color.BLUE);
      break;
    default:
      break;
  }
}

它确实返回了对 View 的引用,那么为什么它不能那样工作呢?

最佳答案

每当你改变一些东西时调用:

ArrayAdapter.notifyDataSetChanged();

无论如何,这不是英国人的好方法,但我想每个解决方案都是一个解决方案¯_(ツ)_/¯

关于android - 关于从 ListView 中检索 View 的困惑,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/46469367/

相关文章:

android - Listview 替换第一个项目而不是创建新项目

ios - swift 错误 : "...whose view is not in the window hierarchy." performseguewithidentifier

安卓短信通知问题

java - Android Eclipse 所有的 Spinner 字体都变白了

java - doGet() servlet 中带参数的多个 if else 语句

android - 使用动态加载的图像滚动 ListView 会混合图像顺序

android - 在自定义 ListView 中更新 TextView

xaml - ContentPage 和 ContentView 之间的 View 到 View 数据绑定(bind)

iphone NavigationController 清除 View 堆栈

java - DefaultHttpClient 超时