【问题标题】:Android ArrayAdapter<String> not updatingAndroid ArrayAdapter<String> 未更新
【发布时间】:2012-08-16 16:22:30
【问题描述】:

所以,我的活动实现了 Runnable,并在 run() 方法中进行了一些网络抓取和等等等等。但这与我的问题无关。我希望它运行一些抓取,然后用我得到的结果更新 ListView。在那个运行方法里面我有这个:

myAL.notifyDataSetChanged();

但它似乎没有更新我的 listView... 这是我的 onCreate:

public void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_main);

    loadingSiteDialog = new ProgressDialog(this);
    loadingSiteDialog.setCancelable(false);
    loadingSiteDialog.setMessage("Retrieving Data, Please Wait...");

    loadingSiteDialog.show();

    list = (ListView)findViewById(R.id.list);
    myAL = new AdapterList(this,R.layout.mainlistlayout);
    list.setAdapter(myAL);
    list.setOnItemClickListener(new OnItemClickListener(){
        @Override
        public void onItemClick(AdapterView<?> parent, View view, int pos, long id) {

        }
    });
    loading = true;
    this.run();

}

在我的 arrayadapter 类中,我使用了在我的 run() 方法中传播的 ArrayLists。 我的自定义 ArrayAdapter 类:

public class AdapterList extends ArrayAdapter<String>{

    public AdapterList(Context context, int textViewResourceId) {
        super(context, textViewResourceId);
    }
    @Override
    public View getView(int pos, View convertView, ViewGroup parent){
        View v = convertView;
        if(v == null){
            LayoutInflater vi = (LayoutInflater)getSystemService(Context.LAYOUT_INFLATER_SERVICE);
            v = vi.inflate(R.layout.mainlistlayout, null);
        }
        TextView roomTV = (TextView)findViewById(R.id.roomTV);
        roomTV.setText(rooms.get(pos));
        TextView wTV = (TextView)findViewById(R.id.washersTV);
        wTV.setText(washersAvailable.get(pos) + "/" + washersTotal.get(pos));
        TextView dTV = (TextView)findViewById(R.id.dryersTV);
        dTV.setText(dryersAvailable.get(pos) + "/" + dryersTotal.get(pos));
        Log.i("CSUMB Laundy","Attempting to getView: " + convertView.toString());
        return v;
    }

}

我是不是忘记了什么?自从我不得不使用自定义列表视图以来已经有一段时间了。

【问题讨论】:

  • 如何添加数据?
  • 在 getView 中它使用了一个公共变量。也许我不完全理解 notifyDataSetChanged 的​​作用。

标签: android listview android-arrayadapter


【解决方案1】:

代替

TextView wTV = (TextView)findViewById(R.id.washersTV);

试试

TextView wTV = (TextView) v.findViewById(R.id.washersTV);

编辑:

我猜您的列表视图没有更新,因为您从未向适配器添加数据。 更改您的适配器类构造方法,

public AdapterList(Context context, int textViewResourceId) {
        super(context, textViewResourceId);
    }

喜欢:

private ArrayList<ListItem> listItems;

        public AdapterList(Context context, int textViewResourceId,
                ArrayList<YourListItemClass> objects) {
            super(context, textViewResourceId, objects);
            listItems = objects;
            // TODO Auto-generated constructor stub
        }

并仅使用

获取您的数据
listItems.get(position);

并将其内容设置为您的视图。

当然,您应该定义一个类似 ListItem 的类和一个此类的 ArrayList 来从这个数组列表构造您的适配器。 当您将数据存储在此数组列表中时,请将其添加到您的适配器中。

myAL.add(yourArrayList);

它会更新你的列表视图。

【讨论】:

  • 我很确定应该修复它(因为它响了,就像我过去那样),但遗憾的是它没有。 ListView 中仍然没有任何内容。我确定我的变量不为空或为空
  • 非常感谢。我不得不做更多的调整过去,但多亏了你,我才得以解决。节省了我更多的谷歌搜索时间。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2021-06-07
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2011-03-10
  • 1970-01-01
相关资源
最近更新 更多