2013-04-02 150 views
0

我在做adapter.notifyDataSetChanged()listView.invalidateViews()我得到 接到電話後,如果條件說「blabla」變爲true。但是我的用戶界面還沒有更新。收到廣播接收方意向後沒有反映變化

public class UserFragment extends Fragment{ 

public class FragmentReceiver extends BroadcastReceiver { 
     @Override 
     public void onReceive(Context context, Intent intent) { 
      if(getSetting("CurrentView","").equalsIgnoreCase("blabla")){ 
       adapter.notifyDataSetChanged(); 
       listView.invalidateViews(); //this is not updating the UI. 

} 
} 

注:我試着撥打同一UserFragment.java再次更換相同的片段來更新改變,但是這雖然更新的用戶界面,但在onReceive給予者除外IllegalStateException: Can not perform this action after onSaveInstanceState

我的代碼的其餘部分方法 -

UserFragment firstFragment = new UserFragment(); 
getSupportFragmentManager().beginTransaction() 
        .replace(R.id.headlines_fragment, firstFragment) 
        .addToBackStack(null).commit(); //IllegalStateException: Can not perform this action after onSaveInstanceState 

任何想法?

+0

使這被顯示在適配器確保數據改變你叫notifydatasetchanged的適配器之前。 –

+0

是的,只有當我轉到其他視圖然後再次返回到此視圖,但不是立即在同一視圖內時,它纔會發生變化。 –

+0

嘗試再次調用onCreate(bundle),這是一個骯髒的技巧,但工程。 –

回答

0

試試這個

public class UserFragment extends Fragment{ 
public class FragmentReceiver extends BroadcastReceiver { 
     @Override 
     public void onReceive(Context context, Intent intent) { 
      if(getSetting("CurrentView","").equalsIgnoreCase("blabla")){ 
       adapter.notifyDataSetChanged(); 
       listView.invalidateViews(); //this is not updating the UI. 
       UserFragment.this.onCreate(savedInstanceState); 

} 
} 
+0

如何獲取'savedInstanceState',因爲它無法解析爲該地點的變量。 –

+0

多數民衆贊成如何你這樣做,使一個全局變量捆綁包;然後在的onCreate \t @Override \t公共無效的onCreate(捆綁savedInstanceState){ \t \t // TODO自動生成方法存根 \t \t super.onCreate(savedInstanceState); bundle = savedInstanceState; } 然後像UserFragment.this.onCreate(bundle)一樣調用onCreate; –

+0

這不是即時更新我的​​用戶界面。我必須重新回來反映這些變化。 –