2012-11-01 12 views
5

में जिंदा रहता है मैं एक TabActivity MyTabActivity कई टैब है कि मैं इस कोड का उपयोग बनाने युक्त कहा जाता है: एक टैब (MyTab2) रजिस्टरों परTabActivity बच्चे गतिविधि पृष्ठभूमि

public class MyTabActivity extends TabActivity { 

    public void onCreate(Bundle savedInstanceState) { 
     setContentView(R.layout.my_tabs); 
     tabHost = (TabHost)findViewById(android.R.id.tabhost); 
     tabHost.getTabWidget().setDividerDrawable(R.drawable.tab_divider); 
     Intent intent = new Intent().setClass(this, MyTab1.class); 
     setupTab(new TextView(this), "Tab1", intent); 
     intent = new Intent().setClass(this, MyTab2.class); 
     setupTab(new TextView(this), "Tab2", intent); 
     intent = new Intent().setClass(this, MyTab3.class); 
     setupTab(new TextView(this), "Tab3", intent); 
    } 

    private void setupTab(final View view, final String tag, Intent intent) { 
     View tabview = createTabView(tabHost.getContext(), tag); 
     TabHost.TabSpec setContent = tabHost.newTabSpec(tag).setIndicator(tabview).setContent(intent); 
     tabHost.addTab(setContent); 
    } 

    private static View createTabView(final Context context, final String text) { 
     View view = LayoutInflater.from(context).inflate(R.layout.tabs_bg, null); 
     TextView tv = (TextView) view.findViewById(R.id.tabsText); 
     tv.setText(text); 
     return view; 
    } 
} 

गतिविधियों में से एक एक ब्रॉडकास्ट रिसीवर ताकि एक विशिष्ट घटना पर, टैब अपने प्रदर्शित डेटा को रीफ्रेश करेगा। मैं ब्रॉडकास्ट रिसीवर को ऑनपॉज़ में पंजीकरण नहीं कर रहा हूं, क्योंकि मैं चाहता हूं कि यह गतिविधि खुद को ताज़ा करे, भले ही यह वर्तमान में सामने न हो।

public class MyTab2 extends Activity { 

    // listener to receive broadcasts from activities that change 
    // data that this activity needs to refresh on the view 
    protected class MyListener extends BroadcastReceiver { 
     public void onReceive(Context context, Intent intent) { 
      if (intent.getAction().equals("myapp.REFLECT__CHANGES")) { 
       //request new data from the server 
       refreshData(); 
      } 
     } 
    } 

    protected void onResume() { 
     // if listener is not registered yet, register it 
     // normally we would unregister the listener onPause, but we want 
     // the listener to fire even if the activity is not in front 
     if (!listenerIsRegistered) { 
      registerReceiver(listener, new IntentFilter("myapp.REFLECT_CHANGES")); 
      listenerIsRegistered = true; 
     } 
     super.onResume(); 
    } 

मेरे समस्या यह है कि मैं लग रहा है कि यहां तक ​​कि गतिविधि कि MyTabActivity के प्रदर्शन से पहले करने के लिए बैकअप लेने और MyTabActivity दूसरी बार शुरू करने, के बाद कि MyTab2 के कहने में पहले प्रवेश द्वार पर बनाया गया था कि MyTabActivity अभी भी जीवित प्रतीत होता है और जब मैं उस ईवेंट को प्रसारित करता हूं जो टैब को अपने डेटा को रीफ्रेश करने के लिए ट्रिगर करता है, तो MyTab2 का पुराना उदाहरण और MyTab2 का नया उदाहरण ताज़ा हो रहा है क्योंकि दोनों प्रसारण प्राप्त करते हैं। मेरा सवाल यह है कि TabActivity से समर्थन करते समय मैं TabActivity की सभी बाल गतिविधियों को कैसे मार सकता हूं?

क्या बच्चे की गतिविधियों के पुराने उदाहरण आसपास रह रहे हैं क्योंकि जब मैं आगे की ओर जाता हूं तो मैं ब्रॉडकास्ट रिसीवर को अपंजीकृत नहीं कर रहा हूं?

जैसा कि आप कल्पना कर सकते हैं, इस समस्या को प्रत्येक बार बाद में माइटाबैक्टिविटी शुरू हो जाती है।

उत्तर

1

इस प्रसारित करने के लिए कोई ज़रूरत नहीं: ऐसा करने का

instaed:

Intent intent = new Intent().setClass(this, MyTab1.class); 
     setupTab(new TextView(this), "Tab1", intent); 
     intent = new Intent().setClass(this, MyTab2.class); 
     setupTab(new TextView(this), "Tab2", intent); 
     intent = new Intent().setClass(this, MyTab3.class); 
     setupTab(new TextView(this), "Tab3", intent); 

सिर्फ इस

tabHost = (TabHost)findViewById(android.R.id.tabhost); 
     tabHost.getTabWidget().setDividerDrawable(R.drawable.tab_divider); 
     Intent intent = new Intent().setClass(this, MyTab1.class).addFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP); 
     setupTab(new TextView(this), "Tab1", intent); 
     intent = new Intent().setClass(this, MyTab2.class).addFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP); 
     setupTab(new TextView(this), "Tab2", intent); 
     intent = new Intent().setClass(this, MyTab3.class).addFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP); 
     setupTab(new TextView(this), "Tab3", intent); 

Thats यह करते हैं, और आपकी समस्या हो जाएगा

हल किया गया
+0

Intent.FLAG_ACTIVITY_CLEAR_TOP, यह कथन शीर्ष गतिविधि को साफ़ करता है जो स्टैक में जोड़े जाते हैं। और उसके बाद ऑनक्रेट() को बुलाया जाता है। यह मेरे मामले में खुशी है। –

संबंधित मुद्दे