2012-10-23 24 views
7

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

क्या कोई अच्छा उदाहरण या ओपन सोर्स प्रोजेक्ट्स दिखा रहा है कि यह सही तरीके से कैसे करें?

उत्तर

6

मैं एबीएस का उपयोग सीधे करने के लिए नहीं करता। एक बार आपके टैब को खंड स्विचिंग आदि की आवश्यकता होने के बाद आप परेशानी में भाग लेंगे। मुझे लगता है कि ऐसा करने का सही दृष्टिकोण ViewPagerIndicator का उपयोग करना है, जो एबीएस के साथ संगत है। बोनस के रूप में आपको टैब के बीच दाएं-बाएं स्वाइप भी मिलते हैं। आपको कंपैट पैकेज की आवश्यकता है (जैसे एबीएस के लिए), उदाहरण का उपयोग आप samples folder में पा सकते हैं।

+0

लेकिन क्या दृश्य पेजर के साथ बैक स्टैक में टुकड़े जोड़ने का कोई तरीका है? अभी मैं प्रत्येक टैब के लिए अपने स्वयं के टुकड़े वापस ढेर का प्रबंधन कर रहा हूं। – meh

+0

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

+0

क्या आप कृपया अपने उत्तर में ViewPagerIndicator को लागू करने के कुछ बुनियादी उदाहरण जोड़ सकते हैं? और 2.2 और पुराने पुराने एंड्रॉइड संस्करणों पर काम करने के लिए मुझे किस पैकेज का उपयोग करने की आवश्यकता है। – meh

6

एडगर जैसा कि बताया जा android navigation guide एक अच्छी जगह शुरू करने के लिए है। लेकिन मुझे एंड्रॉइड के साथ काम करने के इरादे से कुछ टिप्पणियां जोड़ने दें।

नया एसीटोनबार टैब उसी तरह लागू किया जाना चाहिए जैसा कि यह Google play एप में काम करता है। इसका अर्थ यह है कि जैसे ही आप किसी टैब के भीतर कुछ सामग्री के बारे में कुछ विवरण चाहते हैं, आप एक नए दृश्य/खंड/गतिविधि पर जाएंगे और टैब गायब हो जाएंगे।

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

ट्यूटोरियल और नमूने

मेरा व्यक्तिगत पसंदीदा उदाहरण और ट्यूटोरियल Googles वेब पेज पर ActionBar ट्यूटोरियल के तहत tabs tutorial है।

टैब नेविगेशन के उदाहरण नमूने प्रोजेक्ट में भी पाए जा सकते हैं जो एंड्रॉइड-एसडीके के साथ आते हैं। यहां जाएं: android-sdk\extras\android\support\samples\Support4Demos\src\com\example\android\supportv4\app और इसके लिए देखें: FragmentTabs.java या FragmentTabsPager.java

यदि आप एक्शनबैरशेलॉक का उपयोग करना चाहते हैं तो आप download ActionBarSherlock भी देख सकते हैं और/नमूने निर्देशिका में नमूने फ़ोल्डर को देख सकते हैं। वहां आपके पास TabNavigation.java और TabNavigationCollapsed.java में टैब डेमो हैं। हालांकि मुझे लगता है कि आपको एक्शनबार ट्यूटोरियल को एक शॉट देना चाहिए। वापस ढेर

साथ

टैब्स भी कहते हैं कि तुम एक टैब बार दिखाई हर समय (हालांकि यह अनुशंसित नहीं है) है कि करने के लिए चाहते हैं। फिर आपको प्रत्येक टैब के लिए एक कस्टम बैक स्टैक बनाना होगा, आप इसे लागू करने के उदाहरण के लिए here देख सकते हैं।

मैप्स और टैब

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

+0

यह वास्तव में मेरी मदद की! धन्यवाद! –

1

मैंने कई बार टुकड़े और टैब के साथ एक्शनबार शेरलॉक किया है और यह अद्भुत काम कर रहा है।

import android.support.v4.app.Fragment; 
import android.support.v4.app.FragmentTransaction; 

import com.actionbarsherlock.app.ActionBar; 
import com.actionbarsherlock.app.ActionBar.Tab; 
import com.android.wifilogger.R; 

public class WifiTabListener implements ActionBar.TabListener { 
     public Fragment fragment; 
     public MainTabActivity act; 

     public WifiTabListener(Fragment fragment, MainTabActivity act) { 
     this.fragment = fragment; 
     this.act = act; 
     } 


     @Override 
     public void onTabSelected(Tab tab, FragmentTransaction ft) { 
      ft.replace(R.id.root, fragment); 
     } 

     @Override 
     public void onTabUnselected(Tab tab, FragmentTransaction ft) { 
      ft.remove(fragment); 
     } 

     @Override 
     public void onTabReselected(Tab tab, FragmentTransaction ft) { 
     } 
} 

और अपने TabActivity की स्थापना:

public class MainTabActivity extends SherlockFragmentActivity { 

public ActionBar actionBar; 
private ActionBar.Tab listTab; 
public MenuItem refreshItem; 
private SherlockFragment listFragment; 
private SherlockFragment mapFragment; 



@Override 
public void onCreate(Bundle savedInstanceState) { 
    super.onCreate(savedInstanceState); 
    // getActionBar().setDisplayHomeAsUpEnabled(true); 


    actionBar = getSupportActionBar(); 

    actionBar.setNavigationMode(ActionBar.NAVIGATION_MODE_TABS); 

    setContentView(R.layout.main); 

    ActionBar.Tab settingsTab = actionBar.newTab().setText("Settings") 
      .setTag("settings"); 
    listTab = actionBar.newTab().setText("Wifi List") 
      .setTag("list"); 
    ActionBar.Tab mapTab = actionBar.newTab().setText("Map").setTag("map"); 

    SherlockFragment settingsFragment = new SettingsFragment(); 
    listFragment = new WifiListFragment(); 
    mapFragment = new WifiMapFragment(); 

    settingsTab.setTabListener(new WifiTabListener(settingsFragment, this)); 
    listTab.setTabListener(new WifiTabListener(listFragment, this)); 
    mapTab.setTabListener(new WifiTabListener(mapFragment, this)); 

    actionBar.addTab(listTab,false); 
    actionBar.addTab(mapTab,false); 
    actionBar.addTab(settingsTab,false); 
    actionBar.selectTab(listTab); 

} 

आप कहाँ है अपने खुद के टुकड़े करने के लिए SettingsFragment, MapFragment और ListFragment बदलने के लिए

आप एक TabListener की जरूरत है। आप setTargetFragment का उपयोग करके इस टैबफैगमेंट में से एक में डायलॉगफ्रैगमेंट भी जोड़ सकते हैं लेकिन यह मेरा प्रश्न नहीं है।

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