2012-05-07 6 views
1

많은 질문을 받았지만 작동하도록 만들 수는 없습니다.새로 고침 목록보기

나는리스트 뷰를 가지고 있고 나는 그것을 업데이트하기 위해 노력하고있어 ..

편집 : 모든 코드는, 어쩌면 내가 다른 곳에서 잘못되었다.

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

관련 문제