2013-04-12 17 views
6

के साथ एक्शन बार टैब को कार्यान्वित करना हाल ही में मुझे एक्शन बार टैब लागू करने की आवश्यकता है जो मौजूदा खंड को नए टुकड़े से बदल देगा। गहन खोज के घंटों के बावजूद मैं एक स्पष्ट समाधान खोजने में असमर्थ था, इसलिए मैंने सोचा कि मैं प्रस्तुत करूंगा कि मैंने यहां समस्या का समाधान कैसे किया। दो टुकड़ों में सूची दृश्य शामिल थे, जो एक प्रमुख जटिल कारक साबित हुआ।टुकड़े

उत्तर

15

पहले एक गतिविधि बनाएं जिसमें आप टुकड़े संलग्न करना चाहते हैं। कि गतिविधि के लिए एक्सएमएल फ़ाइल में इतनी तरह एक रेखीय लेआउट जोड़ें:

<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" 
xmlns:tools="http://schemas.android.com/tools" 
android:layout_width="match_parent" 
android:layout_height="match_parent" 
android:orientation="vertical" 
tools:context=".WoodenSideProject" > 
<LinearLayout 
    android:id="@+id/fragment_placeholder" 
    android:layout_width="match_parent" 
    android:layout_height="match_parent" 
    android:orientation="vertical" > 
</LinearLayout> 

एक्सएमएल फ़ाइल के लिए कुछ और न जोड़ें। ग्रह होस्ट भी नहीं है जो ग्रहण के साथ प्रीलोड किया गया है।

अगला अपने टुकड़े बनाएं। सबसे पहले अपने टुकड़े के लिए यूआई बनाएं, आप इसे टुकड़े की एक्सएमएल फाइल का उपयोग करके कैसे चाहते हैं। मैं एक सूची दृश्य के साथ एक टुकड़ा बनाने के लिए कैसे दिखा देंगे:

public class Fragment1Name extends Fragment 
{ 
public static String TAG="DirectionsFragment"; 
private String[] list_items = {"Put the list of Strings you want here"}; 
ListView lView1; 
/*@Override 
public void onActivityCreated(Bundle savedInstanceState) 
{ 
    super.onActivityCreated(savedInstanceState); 
    ArrayAdapter<String> adapter = new ArrayAdapter<String>(getActivity(), 
      android.R.layout.simple_list_item_1, list_items); 
     setListAdapter(adapter); 
}*/ 

@Override 
public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) { 
    View view = inflater.inflate(R.layout.fragment_XML_title, container, false); 
    createListView(view); 
    // Inflate the layout for this fragment 
    return view; 
} 

private void createListView(View view) 
{ 
    lView1 = (ListView) view.findViewById(R.id.ListViewID); 
    //Set option as Multiple Choice. So that user can able to select more the one option from list 
    lView1.setAdapter(new ArrayAdapter<String>(getActivity(), 
    android.R.layout.simple_list_item_1, list_items)); 
} 
} 

कुछ लोगों को एक टुकड़ा एक सूची दृश्य का उपयोग करता है के लिए ListFragment विस्तार सुझाव देते हैं। मेरा अनुभव यह है कि यह इसके लायक है उससे ज्यादा परेशानी है।

इस प्रकार गतिविधि का जावा फ़ाइल सेट करें:

class MyTabsListener implements ActionBar.TabListener { 
public Fragment fragment; 

public MyTabsListener(Fragment fragment) { 
    this.fragment = fragment; 
} 

@Override 
public void onTabReselected(Tab tab, FragmentTransaction ft) { 
    //do what you want when tab is reselected, I do nothing 
} 

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

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

मैं अगर दूसरों मैं जितना मुसीबत पड़ा है पता नहीं है:

public class ActivityName extends FragmentActivity { 
public static Context appContext; 

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

ActionBar actionBar = getActionBar(); 
actionBar.setDisplayHomeAsUpEnabled(true); 
actionBar.setNavigationMode(ActionBar.NAVIGATION_MODE_TABS); 
setTitle("WoodenSideProject"); 

ActionBar.Tab tab1 = actionBar.newTab().setText("Tab1"); 
ActionBar.Tab tab2 = actionBar.newTab().setText("Tab2"); 
ActionBar.Tab tab3 = actionBar.newTab().setText("Tab3"); 

Fragment Fragment1Name = new Fragment1Name(); 
Fragment Fragment2Name = new Fragment2Name(); 
Fragment Fragment3Name = new Fragment3Name(); 

tab1.setTabListener(new MyTabsListener(Fragment1Name)); 
tab2.setTabListener(new MyTabsListener(Fragment2Name)); 
tab3.setTabListener(new MyTabsListener(Fragment3Name)); 

actionBar.addTab(tab1); 
actionBar.addTab(tab2); 
actionBar.addTab(tab3); 
} 

एक ही गतिविधि के भीतर निम्नलिखित वर्ग बनाने टुकड़ों के साथ एक्शन बार टैब को कार्यान्वित करना, लेकिन अगर वे हैं तो मुझे आशा है कि इससे मदद मिलती है। बेहतर कार्यान्वयन के लिए कोई सुझाव बहुत सराहना की जाएगी।

+0

अगर आपको इस तरह की त्रुटि मिली तो क्या होगा? एंड्रॉइड रनटाइम (5485): java.lang.IleglegalStateException: विफलता बचत स्थिति: सक्रिय ने इंडेक्स को मंजूरी दे दी है: -1 – CaffeineShots

+1

फिर आपको एक त्रुटि मिलेगी और ऐप बंद हो जाएगा =) – Waclock

+0

यह टैबलिस्टर का बेहतर कार्यान्वयन है जो Google की पेशकश में है गाइड। – David

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