2011-10-19 15 views
9

का उपयोग कर एक टुकड़ा में ActionBar बदलने, एक गतिविधि मैं इस तरह बस लाइनों की सूची प्रदर्शित करते रहा हूँ के भीतर बुलाया: पर उपयोगकर्ता क्लिक करता है एक बार "स्टेशनों", मुझे पसंद है,जब टुकड़े

Page 1, when opening for the first time.

फिर पाठ्यक्रम के स्टेशनों की एक सूची दिखाने के लिए। मैं इस कोड का उपयोग कर रहा:

public void onCreate(Bundle savedInstanceState) { 
    super.onCreate(savedInstanceState); 

    setContentView(R.layout.act_long_distance); 

    FragmentTransaction ft = getSupportFragmentManager().beginTransaction(); 
    ft.add(R.id.f_long_distance, new LongDistanceFragment()).commit(); 
} 

@SuppressWarnings({"UnusedDeclaration"}) 
public void showStationList(View view) { 
    String tag = (String) view.getTag(); 
    if (tag != null && tag.length() > 0) { 
     FragmentTransaction ft = getSupportFragmentManager().beginTransaction(); 
     StationListFragment fragment = new StationListFragment(tag.split(",")); 
     ft.add(R.id.f_long_distance, fragment); 
     // ft.replace(R.id.f_long_distance, fragment); 
     ft.setTransition(FragmentTransaction.TRANSIT_FRAGMENT_FADE); 
     ft.addToBackStack(null); 
     ft.commit(); 
    } 
} 

इस गतिविधि के लिए एक्सएमएल है:

After clicking on the Station List button

:

<LinearLayout 
    android:id="@+id/ll_container" 
    xmlns:android="http://schemas.android.com/apk/res/android" 
    android:layout_width="fill_parent" 
    android:layout_height="fill_parent" 
    android:orientation="vertical" 
    > 
    <FrameLayout 
     android:id="@+id/f_long_distance" 
     android:layout_weight="1" 
     android:layout_width="match_parent" 
     android:layout_height="match_parent" 
     /> 
</LinearLayout> 

StationListFragment एक सरल ListFragment दूसरे के शीर्ष पर दिखाया गया है

एक्शनबार के बावजूद क्या अच्छा काम करता है, अब इसमें शीर्षक ठीक से है केवल।

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

ActionBar after coming back from List button

डॉक्स कह रहे हैं कि जिस तरह से ActionBar जोड़ने के लिए तरीकों आदि onCreateOptionsMenu उपयोग कर रहा है

तो, LongDistanceFragment में (पता चला पहले एक), मैं इस तरह बार बना रहा हूं:

@Override 
public void onViewCreated(View view, Bundle savedInstanceState) { 
    Log.d(TAG, "onViewCreated"); 
    super.onViewCreated(view, savedInstanceState); 

    setHasOptionsMenu(true); 
} 

@Override 
public void onCreateOptionsMenu(Menu menu, MenuInflater inflater) { 
    super.onCreateOptionsMenu(menu, inflater); 

    ActionBar bar = getSupportActivity().getSupportActionBar(); 
    bar.setNavigationMode(ActionBar.NAVIGATION_MODE_LIST); 
    bar.setListNavigationCallbacks(new SimpleSpinnerArrayAdapter(getActivity()), this); 
} 

लेकिन किसी भी तरह उसे पुनर्स्थापित नहीं किया गया है एक बार उपयोगकर्ता है कि टुकड़ा में वापस आ गया है।

मुझे लगता है कि फ्रैगमेंट लेनदेन को वापस लेते समय एक्शनबार की स्थिति को पुनर्प्राप्त करने का एक तरीका आवश्यक है।

मुझे क्या याद आ रही है? किसी भी मदद के लिए धन्यवाद।

+0

मैं इस समय भी इस से जूझ रहा हूं। यहां एक संबंधित प्रश्न है। http://stackoverflow.com/questions/6503189/fragments-onresume-from-back-stack –

उत्तर

9

यदि मैं आपका कोड सही ढंग से समझता हूं, तो समस्या आपके StationListFragment के भीतर होने की संभावना है।

एक्शनबार गतिविधि के साथ जुड़ा हुआ है, न कि इसके भीतर एक विशेष टुकड़ा।

मेरा अनुमान है कि कि StationListFragment भीतर आप "स्टेशनों" शीर्षक प्रदर्शित करने और सूची नेविगेशन मोड अक्षम करने के ActionBar संशोधित कर रहे हैं। उस स्थिति में, बैक बटन दबाकर लेनदेन को अनदेखा कर दिया जाता है - प्रभावी रूप से स्टेशन लिस्टफ्रैगमेंट को हटा रहा है - लेकिन गतिविधि के एक्शन बार में किए गए किसी भी बदलाव को स्वचालित रूप से पूर्ववत नहीं करता है।

आपको क्या करने की आवश्यकता होगी अपने स्टेशन सूची टुकड़ा के भीतर राज्य परिवर्तन संचालकों में से एक को ओवरराइड पूर्ववत करने के लिए ActionBar बदल जाता है जब यह/छिपा हटा दिया गया है।

एक बेहतर दृष्टिकोण StationListFragment साथ LongDistanceFragment का आदान-प्रदान करने के लिए एक replace लेन-देन का उपयोग किया जाएगा (बल्कि पूर्व की चोटी पर बाद के जोड़ने से।) इसके बाद आप कार्यवाही बार प्रत्येक टुकड़ा करने के लिए कॉन्फ़िगर करने के लिए वे ऐसा कोड जोड़ सकते हैं हटाए जाने के बाद साफ होने की कोशिश करने के बजाए जब वे दिखाई देते हैं (onResume ओवरराइड करके) उचित रूप से सेट अप करें।

+2

सूचीफ्रैगमेंट में राज्य परिवर्तन हैंडलर में से कोई भी वास्तव में बिल्कुल नहीं कहा जाता है, इसलिए आपके पास ऐसा करने का कोई तरीका नहीं है। यह एपीआई एपीआई में एक मिस है। –

+1

मैं प्रतिस्थापन का उपयोग कर रहा हूं लेकिन मैं बैक स्टैक पर विस्तार दृश्य जोड़ रहा हूं। और फिर जब बैक बटन दबाया जाता है तो शीर्षक पर रीसेट करने में सक्षम होने के लिए सूची में कोई ईवेंट नहीं निकाल दिया जाता है .. –

+0

फिर वह एक्शनबार शीर्षक कहां बदल रहा है? इस नमूने में कोड के आधार पर इसे कभी भी "बस लाइन स्टॉप" प्रदर्शित नहीं करना चाहिए - मुझे यह मानना ​​है कि यह स्टेशन लिस्टफ्रैगमेंट में हो रहा है। –

1

मैं एक ही समस्या से निपट रहा था और जब मैं onStop दूसरी कार्रवाई के तरीके में एक्शनबार में परिवर्तन वापस करता हूं, तो यह ठीक काम करता है।

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