2013-02-20 16 views
16

मैं एक Fragment जो एक TabHost जड़ लेआउट के रूप में इस प्रकार है है ...टुकड़ा getArguments() रिटर्न अशक्त

<?xml version="1.0" encoding="utf-8"?> 
<TabHost xmlns:android="http://schemas.android.com/apk/res/android" 
    android:id="@android:id/tabhost" 
    android:layout_width="fill_parent" 
    android:layout_height="fill_parent"> 

    <LinearLayout 
     android:orientation="vertical" 
     android:layout_width="fill_parent" 
     android:layout_height="fill_parent"> 

     <TabWidget 
      android:id="@android:id/tabs" 
      android:layout_width="fill_parent" 
      android:layout_height="wrap_content" /> 

     <FrameLayout 
      android:id="@android:id/tabcontent" 
      android:layout_width="fill_parent" 
      android:layout_height="fill_parent"> 

      <FrameLayout 
       android:id="@+id/tab_1" 
       android:layout_width="fill_parent" 
       android:layout_height="fill_parent" /> 

      <!-- More FrameLayouts here - each are placeholders for Fragments -->  

     </FrameLayout> 
    </LinearLayout> 
</TabHost> 

टैब सामग्री के लिए प्रत्येक Fragment अद्यतन इस प्रकार है/बनाने के लिए कोड .. ।

private void updateTab(String tabId, int placeholder) { 
    FragmentManager fm = getFragmentManager(); 
    if (fm.findFragmentByTag(tabId) == null) { 
     Bundle arguments = new Bundle(); 
     arguments.putInt("current_day", mCurrentTab); 
     EpgEventListFragment fragment = new EpgEventListFragment(); 
     fragment.setArguments(arguments); 

     fm.beginTransaction() 
       .replace(placeholder, new EpgEventListFragment(), tabId) 
       .commit(); 
    } 
} 

EpgEventListFragment की onCreate(...) विधि में मैं तो तर्क प्राप्त करने की कोशिश Bundle लेकिन मैं हमेशा निम्न कार्य null मिलता है ...

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

    Bundle arguments = getArguments(); 
    if (arguments == null) 
     Toast.makeText(getActivity(), "Arguments is NULL", Toast.LENGTH_LONG).show(); 
    else 
     mCurrentDay = getArguments().getInt("current_day", 0); 

    ... 
} 

मुझे यहां क्या याद आ रही है? मैंने onAttach(...) में भी कोशिश की लेकिन मुझे अभी भी शून्य नहीं मिला। मैं Fragments का उपयोग करने के लिए नया हूं इसलिए मुझे उम्मीद है कि एक आसान कारण है लेकिन खोज करते समय मैं कुछ भी नहीं आया हूं।

उत्तर

43

मैं सोच रहा हूँ अगर इससे आपकी समस्या से कोई लेना देना नहीं है:

fm.beginTransaction() 
    .replace(placeholder, new EpgEventListFragment(), tabId) 
    .commit(); 

आप कर रहे हैं एक नए Fragment (कि तर्क नहीं है के बाद से यह ताजा instantiated किया गया है)।

इसके बजाय कोशिश

Fragment fragment = new EpgEventListFragment(); 
fragment.setArguments(arguments); 
fm.beginTransaction() 
    .replace(placeholder, fragment, tabId) 
    .commit(); 
+10

ओह तुम मुझे मजाक कर रहे हैं करने के लिए मिल गया है ... Aaaargh! – Squonk

+2

कभी-कभी यह सब कुछ आंखों की एक जोड़ी लेता है। धन्यवाद! मैं मूल रूप से तर्क पारित नहीं कर रहा था इसलिए मैं 'प्रतिस्थापन' को कॉल में बदल रहा था (...) '। मेरे जवाब को स्वीकार करने में मुझे समय लगता है लेकिन मैं ऐसा करूँगा। एक बार फिर धन्यवाद। – Squonk

+1

@ स्क्वॉन्क आपका स्वागत है! मुझे याद है कि एक बार मैं 'फ्रैगमेंट एक्टिविटी' का विस्तार करना भूल गया था। यह मेरे जीवन का सबसे अच्छा आधे घंटे था यह पता लगाने की कोशिश कर रहा था :-) –

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