2012-05-07 23 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() 

を試してみてください。

これが機能しないと私が見たのは、notify/invalidateメッセージの処理が遅れたためです。 UIスレッドで実行されているキューに入れられたメッセージが複数ある場合は、それらをシリアル形式で処理する必要があります。すべてのUI操作が処理しなければならないUIスレッドは1つだけです。 UIスレッドで他のことが終わるのを待っていないことを確認し、コードが機能するはずです。

+0

は機能しませんでした。それはちょうどリフレッシュするように見えません:S – Markissimo

関連する問題