6

मैं एपीआई 15 और न्यूनतम 8 तो मैं टुकड़े प्रबंधन करने के लिए समर्थन पुस्तकालय का उपयोग करने के लिए एक Android एप्लिकेशन को लक्ष्य कर रहा। मैं टुकड़े कि मैं अनुप्रयोग के कई हिस्सों में उपयोग करने का एक सेट है।ListView हेडर के रूप में एक टुकड़ा जोड़े

अब, एक गतिविधि में मैं लेआउट में एक ListView है:

<ListView xmlns:android="http://schemas.android.com/apk/res/android" 
    xmlns:tools="http://schemas.android.com/tools" 
    android:id="@+id/listOfEvents" 
    android:layout_width="match_parent" android:layout_height="match_parent"> 
</ListView> 

मैं ListView शीर्षक में मेरा एक टुकड़ा जोड़ना चाहते हैं। मैं इस की कोशिश की:

@Override 
public void onCreate(Bundle savedInstanceState) { 
    super.onCreate(savedInstanceState); 
    setContentView(R.layout.event_open); 

    listOfEvents = (ListView) findViewById(R.id.listOfEvents); 

      Fragment fragment = new SortingStandardFragment(); 
      getSupportFragmentManager() 
       .beginTransaction() 
        .add(fragment, null) 
       .commit(); 

      View fragmentView = fragment.getView(); // problem: fragment is null! 
      listOfEvents.addHeaderView(fragmentView); 
    } 

लेकिन जब से fragment.getView() अशक्त रिटर्न (एपीआई संदर्भ डॉक्स कहते हैं कि मैं ऐड कॉल में एक GroupView आईडी डाल करने के लिए है, लेकिन जहां चाहिए मैं में GroupView डाल मैं कोई त्रुटि मिलती है ? लेआउट वहाँ एक और तरीका निशान हिट करने के लिए है

+0

मुझे यकीन है कि यह इस तरह से काम कर सकते हैं नहीं कर रहा हूँ, लेकिन टुकड़ा विचार एक framelayout एक आईडी की स्थापना पैदा कर रही है (यदि आप संसाधनों में आईडी नाम जोड़कर आईडी बना सकते हैं), हेडर के रूप में जोड़ने और फिर लेन-देन में कि आईडी की जगह बनाने के टुकड़ा – sherpya

उत्तर

14

मैं सिर्फ टुकड़ा मैं सूची शीर्षक में जरूरत से युक्त एक नए लेआउट बनाने के द्वारा इस हल:

<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" 
    android:layout_width="match_parent" 
    android:layout_height="match_parent"> 

    <fragment 
     android:id="@+id/myFragmentEmbedded" 
     android:name=".SortingStandardFragment" 
     android:layout_width="match_parent" 
     android:layout_height="wrap_content" /> 

</LinearLayout> 

और गतिविधि कोड में:

LayoutInflater inflater = getLayoutInflater(); 
header = inflater.inflate(R.layout.myLayout, null); 
listOfEvents.addHeaderView(header); 

SortingStandardFragmenttitleFragment = (SortingStandardFragment) 
    getSupportFragmentManager() 
      .findFragmentById(R.id.myFragmentEmbedded); 
4

मैं अभी तक एक और xml फ़ाइल का सहारा के बिना एक संस्करण चाहता था, इसलिए यहाँ यह जाता है:

Fragment fragment = ... 
FrameLayout v = new FrameLayout(getActivity()); 
v.setId(42); 
listView.addHeaderView(v, null, false); 
FragmentManager fm = getActivity().getSupportFragmentManager(); 
fm.beginTransaction().add(v.getId(), fragment).commit(); 
+8

यह सबसे अच्छा है, ids.xml फ़ाइल में आईडी घोषित करने के लिए हालांकि, यकीन है कि वहाँ आईडी ओवरलैपिंग का कोई खतरा नहीं है बनाने के लिए। – njzk2

+0

यदि आप जोड़ने के हैडर कंटेनर OnCreate (supposably अनुरोध के बाद) में नहीं ListView के लिए, onBackPressed() क्योंकि सूचीदृश्य (आप कंटेनर हेडर) रोक के बाद बच्चे को नष्ट में आप अनुप्रयोग दुर्घटना - fragmentmanager इंजेक्षन नहीं आप कंटेनर में खंड – merovingen

1

मामले में किसी को भी उत्सुक यही कारण है कि अपने पहले ही प्रयास में विफल रहा है:

  • जीवन चक्र घटनाओं को यूआई थ्रेड
  • Fragment.onCreateView एक जीवन चक्र घटना
  • Activity.onCreate एक जीवन चक्र है घटना
  • .getView() में Fragment.onCreateView
  • commit पोस्ट एक जीवन चक्र घटना बनाए गए दृश्य देता है

निष्कर्ष: commit का परिणाम अगले पाश है जो onCreate लौटे के बाद से दिख रहा है।

कोई commit को getSupportFragmentManager().executePendingTransactions() के साथ तत्काल होने के लिए मजबूर करने का प्रयास कर सकता है, इस पर दस्तावेज़ पढ़ने के बाद।

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