所以,我的活动实现了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;
}
}
我只是忘了什么?已经有一段时间了,因为我不得不使用自定义列表视图。
答案 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);
它会更新您的列表视图。