2013-11-25 73 views
1

我在mMessageReceiver中更改ListView控件的源数据,但ListView控件仍然显示旧行, 如何刷新mMessageReceiver中的ListView控件?谢谢!如何刷新ListView控件;

private ListView lv; 

private BroadcastReceiver mMessageReceiver = new BroadcastReceiver() { 
    @Override 
    public void onReceive(Context context, Intent intent) { 
     HandleRule.SaveFullRule(PublicPar.SharedRule); 
     //I hope to refresh ListView control 
    } 
}; 


@Override 
protected void onCreate(Bundle savedInstanceState) { 
    super.onCreate(savedInstanceState); 
    setContentView(R.layout.sms_main); 

    LocalBroadcastManager.getInstance(this).registerReceiver(mMessageReceiver, 
       new IntentFilter(PublicPar.LocalBroadcastForRule)); 

    PublicPar.myContext=getApplicationContext();   
    lv = getListView(); 

     FillListView(); 
} 

private void FillListView(){ 
    Cursor c=HandleRule.GetCursorOfAllRuleMain();  
    String[] cols=new String[] {"name"}; 
    int[] views=new int[]{R.id.mylisttext}; 
    SimpleCursorAdapter myAdapter=new SimpleCursorAdapter(this,R.layout.sms_simple_list_item_multiple_choice,c,cols,views); 
    lv.setAdapter(myAdapter); 
    lv.setChoiceMode(ListView.CHOICE_MODE_MULTIPLE);  
    SetCheckBoxStatus(); 
} 
+0

难道你只是调用'FillListView()'? – hichris123

+0

是的,我可以调用FillListView(),但我认为这不是好代码 – HelloCW

回答

3
myAdapter..notifyDataSetChanged(); 

应该刷新列表视图。
有关更多详细信息,请参阅developer page

+0

lv.getAdapter()是ListAdapter,但它不支持notifyDataSetChanged(); – HelloCW

+0

你的意思是你不能调用myAdapter.notifyDataSetChanged()?顺便说一下,你有没有尝试过调用你的方法FillListView()? –

+0

SimpleCursorAdapter myAdapter是本地var,所以我无法在mMessageReceiver中调用,而更多lv.getAdapter()返回ListAdapter,但ListAdapter不支持notifyDataSetChanged()! – HelloCW