0

所以,我的活动实现了 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;
    }

}

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

4

1 回答 1

2

代替

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 来从这个 arraylist 构造你的适配器。当您将数据存储在此数组列表中时,将其添加到您的适配器。

myAL.add(yourArrayList);

它会更新您的列表视图。

于 2012-08-16T07:45:14.077 回答