2012-08-16 32 views
0

所以,我的活动实现了Runnable,并且在run()方法中我做了一些网页抓取和等等等等等等等等等等等等等等等等等。但是这并不意味着我的问题。我希望它运行一些刮擦,然后用我得到的结果更新ListView。内部的运行方法,我有这样的:Android ArrayAdapter <String>没有更新

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(); 

} 

Withing我使用的ArrayList我的一个ArrayAdapter类,我在我的run()方法中传播。 我的自定义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

如何添加数据? – 2012-08-16 07:28:45

+0

在getView中它使用了一个公共变量。也许我不完全明白notifyDataSetChanged的作用。 – Brandon 2012-08-16 07:40:38

回答

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

myAL.add(yourArrayList); 

它会更新您的列表视图。

+0

我非常肯定,应该修正它(因为它响起了钟声,就像我过去那样),但可悲的是它没有。 ListView中仍然没有任何内容。我确信我的变量不为空或为空 – Brandon 2012-08-16 08:02:00

+0

我编辑了我的答案。 – 2012-08-16 08:22:48

+0

非常感谢。过去我不得不做一些调整,但是多亏了你,我才能解决问题。为我节省了大量的搜索时间。 – Brandon 2012-08-16 08:53:57

相关问题