Android ArrayAdapter <string>未更新</string>

时间:2012-08-16 07:20:39

标签: android listview android-arrayadapter

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

}

我只是忘了什么?已经有一段时间了,因为我不得不使用自定义列表视图。

1 个答案:

答案 0 :(得分:2)

而不是

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

尝试

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

编辑:

我猜你的listview没有更新,因为你从不向适配器添加数据。 从

更改适配器类构造方法
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构造适配器。 将数据存储在此arraylist中时,请将其添加到适配器中。

myAL.add(yourArrayList);

它会更新您的列表视图。