2012-10-22 39 views
7

अरे दोस्तों मैं एक एंड्रॉइड ऐप पर काम कर रहा हूं जहां मैं प्रत्येक टैब के लिए एक गतिविधि समूह को कार्यान्वित करना चाहता हूं। लेकिन चूंकि गतिविधि समूह को बहिष्कृत किया गया है, इसलिए मुझे टुकड़ों का उपयोग करना है। मैंने आखिरी दिनों में गुमराह किया और उस विषय पर कुछ शोध किया लेकिन मुझे अभी भी यह नहीं मिला। नीचे दिया गया ग्राफिक वर्णन करता है कि मैं क्या करना चाहता हूं। इसके अलावा मैं सीधे आईओएस से आ रहा हूं और मुझे अपने सिद्धांतों के बारे में कुछ प्रतिक्रिया चाहिए।एंड्रॉइड फ्रैगमेंट बनाम गतिविधि समूह

enter image description here

आप हर टुकड़ा देख सकते हैं एक WebView टुकड़ा के होते हैं। जब उपयोगकर्ता उस वेबव्यू फ्रैगमेंट में किसी लिंक पर क्लिक करता है - अनुरोध पकड़ा जाता है और एक नया फ्रैगमेंट बदल दिया जाता है जो फिर से वेबव्यू रखता है और पिछले फ्रेम में क्लिक किया गया लिंक लोड करता है। एक बिंदु पर उपयोगकर्ता पहले टुकड़े पर वापस जाने का फैसला करता है और बैक बटन दबाता है।

फ्रैगमेंट्स को रिवर्स ऑर्डर में स्टैक को तब तक पॉप करना चाहिए जब तक वह पहले को नहीं देखता। आदर्श रूप से प्रत्येक टुकड़े को अपने instancestate को बचा लेना चाहिए, ताकि जब उपयोगकर्ता वापस चला जाता है WebView साइट को फिर से लोड करने की आवश्यकता नहीं है।

मैं एक्शनबार शेरलॉक में आया हूं जो फ्रैगमेंट टैब के बारे में एक उदाहरण प्रदान करता है। एक टुकड़ा ढेर का एक उदाहरण भी है। इन दो उदाहरणों को गठबंधन करना आदर्श होगा, ताकि प्रत्येक टैब में फ्रैगमेंट स्टैक शामिल हो।

मेरे कोड structs ऐसा दिखाई देगा:

मेरे TabHost टुकड़ा

public class MyActivity extends SherlockFragmentActivity { 
static TabHost mTabHost; 
static TabManager mTabManager; 

public static int THEME = R.style.Theme_Sherlock_Light; 

@Override 
protected void onCreate(Bundle savedInstanceState) { 
    setTheme(THEME); //Used for theme switching in samples 
    super.onCreate(savedInstanceState); 

    setContentView(R.layout.fragment_tabs); 
    mTabHost = (TabHost)findViewById(android.R.id.tabhost); 
    mTabHost.setup(); 
    mTabManager = new TabManager(this, mTabHost, R.id.myRealTabContent); 

    // adding some Fragment Tabs 
    mTabManager.addTab(mTabHost.newTabSpec(tabNames[i]).setIndicator(tabNames[i]), 
       FragmentStackSupport.CountingFragment.class, bundle); 


    if (savedInstanceState != null) { 
     mTabHost.setCurrentTabByTag(savedInstanceState.getString("tab")); 
    } 
} 


@Override 
protected void onSaveInstanceState(Bundle outState) { 
    super.onSaveInstanceState(outState); 
    outState.putString("tab", mTabHost.getCurrentTabTag()); 
} 



// defining the Tab Manager 

कैसे प्रत्येक टैब के लिए टुकड़ा ढेर की तरह दिखना चाहिए होगा? वर्तमान में मेरे पास प्रत्येक टैब के अंदर एक टुकड़ा के साथ एक टुकड़ा गतिविधि है। लेकिन मुझे आवश्यक तर्क प्राप्त नहीं होता है।

यहाँ मेरी कोड है: (? या वहाँ वेब पर किसी भी उदाहरण हैं) My Fragment with WebView inside

मैं कुछ प्रतिक्रिया और संकेत के लिए खुशी होगी। मुझे स्मृति के बारे में कुछ चिंताएं भी होती हैं - जब उपयोगकर्ता क्लिक करता है और क्लिक करता है और क्लिक करता है और स्मृति को प्रत्येक टुकड़े को ढेर में रखना होता है।

चीयर्स।

+5

+1 एक अच्छी तरह से समझाया गया प्रश्न के लिए। –

+0

क्या आपको कभी इस मुद्दे का ठोस समाधान मिला है? –

उत्तर

1

जब भी उपयोगकर्ता एक लिंक पर क्लिक करता है तो मैं एक नया टुकड़ा बनाने के कई अच्छे कारणों के बारे में नहीं सोच सकता। क्या ऐसा कोई कारण है कि आप ऐसा करने की कोशिश कर रहे हैं? यदि आप एक नया टुकड़ा बनाने के बजाय कन्फऑवरराइडउर्ललोडिंग() से झूठी वापसी करते हैं, तो वेबव्यू नया पेज लोड करेगा, और यदि आप वापस जाना चाहते हैं, तो आप canGoBack() और goBack() विधियों का उपयोग कर सकते हैं। बैक बटन प्रेस को संभालने के लिए, आप अपनी गतिविधि में केडडाउन पर ओवरराइड कर सकते हैं, और कुछ ऐसा कर सकते हैं:

if ((keyCode == KeyEvent.KEYCODE_BACK) && myWebView.canGoBack() { 
     myWebView.goBack(); 
     return true; 
    } 
+0

आपकी प्रतिक्रिया के लिए धन्यवाद। मैं मानता हूं कि यह उप-सर्वोच्च है लेकिन मेरे पास मेरे कारण हैं। हालांकि मुझे लगता है कि मैं आपकी सलाह का पालन करूंगा - यह और भी आसान है। फिर भी मुझे दिलचस्पी है कि प्रत्येक टैब के लिए एक टुकड़ा ढेर कैसे कार्यान्वित करेगा। –

+0

ठीक है, चूंकि आपने पूछा, मुझे यकीन है कि यह एक अच्छा विचार नहीं है, लेकिन आप केवल प्रत्येक टैब के लिए टुकड़े टुकड़े की एक स्टैक (या अन्य डेटा संरचना) कर सकते हैं। प्रत्येक बार उपयोगकर्ता एक लिंक पर क्लिक करता है, उस टैब के स्टैक में टुकड़ा जोड़ें (आप स्पष्ट कारणों से एप्लिकेशन के बैकस्टैक में अपने किसी भी टुकड़े को जोड़ना नहीं चाहते हैं)। फिर, बैक बटन दबाएं और देखें कि वर्तमान में प्रदर्शित टैब का स्टैक गैर-खाली है या नहीं, और यदि सही टैब में अगले एक को प्रदर्शित करने के लिए पॉप करें। – ajpolt

+0

हो सकता है कि प्रति टैब एक अलग गतिविधि हो, और फिर प्रत्येक गतिविधि के अपने टुकड़े होंगे? – tbkn23

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