2012-05-07 135 views
1

我知道我已经被问了很多,但我不能让这个工作。刷新列表视图

我有一个ListView和我试图更新它..

编辑:所有的代码,也许我有别的地方错了。

public class TestActivity extends Activity { 
private TasksDataSource dataSource; 
private ArrayAdapter<Task> adapter; 
private ListView list; 
/** Called when the activity is first created. */ 
@Override 
public void onCreate(Bundle savedInstanceState) { 
    super.onCreate(savedInstanceState); 
    setContentView(R.layout.main); 

    list = (ListView) findViewById(R.id.list); 

    Button btnAdd = (Button) findViewById(R.id.btnAdd); 
    Button btnRefresh = (Button) findViewById(R.id.btnRefresh); 
    Button btnClear = (Button) findViewById(R.id.btnClear); 

    dataSource = new TasksDataSource(this); 
    dataSource.open(); 
    List<Task> tasks = dataSource.getAllTasks(); 

    adapter = new ArrayAdapter<Task>(this, android.R.layout.simple_list_item_1, tasks); 
    list.setAdapter(adapter); 


    btnAdd.setOnClickListener(new View.OnClickListener() { 

     public void onClick(View v) { 
      // TODO Auto-generated method stub 
      Intent startAddIntent = new Intent(TestActivity.this, AddActivity.class); 
      TestActivity.this.startActivity(startAddIntent); 
     } 
    }); 

    btnRefresh.setOnClickListener(new View.OnClickListener() { 

     public void onClick(View arg0) { 
      // TODO Auto-generated method stub 
      updateList(); 

     } 
    }); 
    btnClear.setOnClickListener(new View.OnClickListener() { 

     public void onClick(View v) { 
      // TODO Auto-generated method stub 
      dataSource.deleteAll(); 
     } 
    }); 
} 

的updateList()

public void updateList(){ 

    runOnUiThread(new Runnable() { 

     public void run() { 
      // TODO Auto-generated method stub 
      adapter.notifyDataSetChanged(); 
      list.refreshDrawableState(); 
      list.invalidate(); 
      Toast.makeText(TestActivity.this, "AHHHH", Toast.LENGTH_SHORT).show(); 
     } 
    }); 
} 

我尝试了很多不同的approches的,但没有一个似乎工作。

TKS提前。

+1

是什么让你觉得它没用?你的数据集改变了吗? –

+0

它应该。我是否需要在某处更新它?我编辑了帖子,包括dataSource代码。 – Markissimo

回答

2

尝试

public void updateList(){ 

    runOnUiThread(new Runnable() { 

     public void run() { 
      // TODO Auto-generated method stub 
      adapter.notifyDataSetChanged(); 
      list.refreshDrawableState(); 
      list.invalidate(); 
     } 
    }); 
} 
+0

没有工作。它只是不会刷新:S – Markissimo

+0

在数据库或内容提供者上调用requery()通过CursorAdapter附加到ListView的游标会自动刷新列表 – MrWaqasAhmed

1

两个

notifyDataSetChanged(); 

invalidate() 

应该更新您的看法。

我唯一见过这个不行的,是因为延迟处理通知/无效消息。如果在UI线程上有多个排队的消息运行,则必须以串行方式处理它们。只有一个UI线程需要所有的UI操作。确保你没有在UI线程上等待其他事情完成,并且你的代码应该工作。

+0

不起作用。它只是没有看到刷新:S – Markissimo