2014-04-29 10 views
22

जब मैं अपने टुकड़े की आईडी के साथ findFragmentById() को कॉल करता हूं, तो यह शून्य हो जाता है। मुझे आपको कोड दिखाने दो।findFragmentById वापसी शून्य

activity_main.xml

<?xml version="1.0" encoding="utf-8"?> 
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" 
    android:orientation="vertical" 
    android:layout_width="fill_parent" 
    android:layout_height="fill_parent"> 

     <fragment android:name="com.madduck.test.app.fragment.MainFragment" 
        android:id="@+id/main_fragment" 
        android:layout_width="match_parent" 
        android:layout_height="match_parent" /> 

     <fragment android:name="com.madduck.test.app.fragment.LoginFragment" 
        android:id="@+id/login_fragment" 
        android:layout_width="match_parent" 
        android:layout_height="match_parent" /> 
</LinearLayout> 

MainActivity.java

private static final int LOGIN = 0; 
private static final int MAIN = 1; 
private static final int FRAGMENT_COUNT = MAIN +1; 
private Fragment[] fragments = new Fragment[FRAGMENT_COUNT] 

protected void onCreate(Bundle savedInstanceState) { 
    super.onCreate(savedInstanceState); 
    setContentView(R.layout.activity_main); 

    FragmentManager fm = getSupportFragmentManager(); 
    fragments[LOGIN] = fm.findFragmentById(R.id.login_fragment); 
    fragments[MAIN] = fm.findFragmentById(R.id.main_fragment); 

    FragmentTransaction transaction = fm.beginTransaction(); 
    for (Fragment f : fragments) { 
     if (f != null) 
      transaction.hide(f); 
     else 
      Log.e(TAG, "???"); 
    } 

    transaction.commit(); 
} 

बात है जब मैं फोन fm.findFragmentById(R.id.login_fragment); मैं अशक्त मिल लेकिन जब मैं fm.findFragmentById(R.id.main_fragment); फोन मैं टुकड़ा प्राप्त करता है ।

+0

पोस्ट पूरा क्रैश लॉग और अपने टुकड़ा कोड – Libin

+1

अपने त्वरित उत्तर के लिए धन्यवाद, मैं समाधान नहीं मिला (एक टुकड़े में support.v4 का उपयोग कर रहा था और दूसरे में सामान्य प्रकार का उपयोग कर रहा था) मैं अभी समाधान नहीं पोस्ट कर सकता, क्योंकि मेरे पास 10 प्रतिष्ठा नहीं है, लेकिन कल मुझे जवाब देगी। मैं थोड़ा पहले खोजता हूं और मुझे इससे संबंधित कुछ भी नहीं मिला। – Kar0t

+0

मुझे संदेह है कि यह मुद्दा हो सकता है। किसी भी तरह से आपको यह मिला। अच्छा – Libin

उत्तर

27

अभी मेरी गलती मिली।

मेरी मुख्य गतिविधि में। जावा मैं android.support.v4.app.Fragment; आयात कर रहा था और मेरे loginFragment.java में मैं android.app.Fragment; आयात कर रहा था। मैंने इसे एक ही चीज़ में बदल दिया और fm.findFragmentById(R.id.login_fragment) अब सही टुकड़ा लौटा।

+0

मैं उसी दिन एक ही समस्या का जवाब खोजने की कोशिश कर रहा था, धन्यवाद – ppp

+0

@ एन्नपेल ने वही किया, उस पर 4 घंटे बिताए, लॉल। अंतर्दृष्टि के लिए – Benten

+2

धन्यवाद। मेरे मामले में GetSupportFragmentManager() को पाने के बजाय getFrmentManager() ने समस्या हल की क्योंकि मेरा अंतर्निहित खंड समर्थन पैकेज से था। –

60

उत्तर Kar0t बिल्कुल ठीक है लेकिन यह किसी की मदद कर सकता है। मेरे मामले में मेरे पास एक टुकड़े के अंदर एक टुकड़ा था और मुझे गलत FragmentManager मिल रहा था।

getChildFragmentManager()

और फिर बस लगता है हमेशा की तरह टुकड़ा:: मैं बस कॉल करने के लिए किया था

fm.findFragmentById(R.id.fragment) 
+3

मैं यहां भी संघर्ष कर रहा था। आपको बहुत - बहुत धन्यवाद! –

+1

आपकी मदद के लिए बहुत धन्यवाद! –

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