2012-08-02 9 views
6

से ListFragment लेआउट कैसे एक ListFragment (समर्थन v4 पुस्तकालय का) एक्सएमएल से लेआउट बनाने के लिए? ListFragment अपने लेआउट प्रोग्रामेटिक रूप से सेट अप करता है, इसलिए यदि आप इसे संशोधित करना चाहते हैं, तो आपको व्यू/निकालने के दृश्य के साथ गड़बड़ करने की आवश्यकता है।एक्सएमएल

+0

कृपया इस तो यह स्पष्ट है कि समस्या क्या था (एक सवाल के रूप में पोस्ट) को संपादित करने और जवाब अनुभाग में नीचे समाधान कर दिया:

<ListView android:id="@android:id/list" android:layout_width="match_parent" android:layout_height="wrap_content" android:layout_alignParentLeft="true" android:layout_alignParentTop="true" > </ListView> 
अपने ListFragment कक्षा में

निम्नलिखित कोड डालें । –

+0

क्या आपके पास संदर्भ देने के लिए एक उदाहरण है? – sherpya

+0

पोस्ट सिर्फ एक प्रश्न और उत्तर के रूप में होना चाहिए। यह एक समाधान की तरह दिखता है, लेकिन यह स्पष्ट नहीं है कि मूल प्रश्न क्या था। –

उत्तर

14

मैंने बनाया गया लेआउट xml में परिवर्तित कर दिया है, तो आप अपने विजेट को जोड़/हटा सकते हैं या उदा। pulltorefresh समाधान जोड़ें। आपको आवश्यक आईडी नहीं बदलनी चाहिए। कुछ विगेट्स के लिए आवश्यक आंतरिक आईडी के कारण एक सहायक फ़ंक्शन को कॉल करने की आवश्यकता होती है और इसे समर्थन v4 नेमस्पेस में होना आवश्यक है क्योंकि स्थिरांक डिफ़ॉल्ट दृश्यता के साथ आंतरिक हैं।

list_loader.xml

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

    <LinearLayout 
     android:id="@+id/progress_container_id" 
     android:layout_width="match_parent" 
     android:layout_height="match_parent" 
     android:gravity="center" 
     android:orientation="vertical" 
     android:visibility="gone" > 

     <ProgressBar 
      style="?android:attr/progressBarStyleLarge" 
      android:layout_width="wrap_content" 
      android:layout_height="wrap_content" /> 
    </LinearLayout> 

    <FrameLayout 
     android:id="@+id/list_container_id" 
     android:layout_width="match_parent" 
     android:layout_height="match_parent" > 

     <TextView 
      android:id="@+id/empty_id" 
      android:layout_width="match_parent" 
      android:layout_height="match_parent" 
      android:gravity="center" /> 

     <ListView 
      android:id="@android:id/list" 
      android:layout_width="match_parent" 
      android:layout_height="match_parent" 
      android:drawSelectorOnTop="false" > 
     </ListView> 
    </FrameLayout> 
</FrameLayout> 

और वर्ग ListFragmentLayoutandroid.support.v4.app में

package android.support.v4.app; 

import your.package.R; 
import android.view.View; 

public class ListFragmentLayout 
{ 
    public static void setupIds(View view) 
    { 
     view.findViewById(R.id.empty_id).setId(ListFragment.INTERNAL_EMPTY_ID); 
     view.findViewById(R.id.progress_container_id).setId(ListFragment.INTERNAL_PROGRESS_CONTAINER_ID); 
     view.findViewById(R.id.list_container_id).setId(ListFragment.INTERNAL_LIST_CONTAINER_ID); 
    } 
} 
अपने टुकड़ा है कि फैली ListFragment

में

(अपनी परियोजना में, आप समर्थन v4 जार संशोधित करने की जरूरत नहीं है)

@Override 
public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) 
{ 
    View view = inflater.inflate(R.layout.list_loader, container, false); 
    ListFragmentLayout.setupIds(view); 
    return view; 
} 
+0

आपका मतलब है कि इस बदलाव के साथ यह काम करेगा जैसे कि यह कस्टम दृश्य नहीं है? – seb

+0

आप भयानक आदमी हैं! – seb

+0

मेरे लिए काम नहीं करता है। ऐसा लगता है कि मैं समर्थन lib के पुराने संशोधन का उपयोग कर रहा हूँ। इसमें ListFragmentLayout क्लास भी शामिल नहीं है। मैं इस दृष्टिकोण का उपयोग करने का सुझाव नहीं देता हूं। भविष्य में समर्थन lib के संशोधन में यह काम नहीं कर सकता है। – WindRider

-2

एंड्रोई से घ एसडीके (ListFragment) (http://developer.android.com/reference/android/app/ListFragment.html):

सार्वजनिक देखें onCreateView (LayoutInflater inflater, ViewGroup कंटेनर, बंडल savedInstanceState)

एक सरल सूची दृश्य पर लौटने के लिए डिफ़ॉल्ट कार्यान्वयन प्रदान करें। उप-वर्ग अपने स्वयं के लेआउट के साथ प्रतिस्थापित करने के लिए ओवरराइड कर सकते हैं। यदि ऐसा करने पर, लौटाए गए दृश्य पदानुक्रम में एक सूची दृश्य होना चाहिए जिसका आईडी android.R.id.list है और वैकल्पिक रूप से एक भाई दृश्य आईडी है android.R.id.empty जो सूची खाली होने पर दिखाया जाना है।

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

तो जब आप एक FragmentList ओवरराइड के लिए अपना खुद का लेआउट.एक्सएमएल चाहते हैं तो देखें और अपना खुद का लेआउट बढ़ाएं।

उदाहरण के लिए:

एक एंड्रॉयड लेआउट (yourlistlayout.xml) बनाएँ और स्थिति है जहाँ आप अपने ListFragment दिखाना चाहते हैं पर निम्नलिखित एक्सएमएल डाल दिया।

@Override 
public View onCreateView(LayoutInflater inflater, ViewGroup container, 
     Bundle savedInstanceState) { 
    View v = inflater.inflate(R.layout.yourlistlayout, null);  
    return v;  
} 
+0

यह समर्थन लाइब्रेरी के साथ काम नहीं करेगा क्योंकि आईडी अलग हैं – sherpya