7

मैं ड्रॉवर लेआउट कार्यक्षमता का लाभ उठाने के लिए एक एंड्रॉइड ऐप लिख रहा हूं। मैं पूरे ऐप में उपलब्ध एक नेविगेशन टूल के रूप में ड्रॉवर लेआउट का उपयोग करने की क्षमता रखना चाहता हूं। दराज लेआउट का उपयोग करने के लिए, मैं उपयोग कर रहा हूँ मेरी गतिविधि लेआउट एक्सएमएल फ़ाइलें में निम्नलिखित:एंड्रॉइड ऐप में वरीयता सक्रियता के आसपास ड्रॉवरलाउट को कैसे लपेटें?

<android.support.v4.widget.DrawerLayout 
    xmlns:android="http://schemas.android.com/apk/res/android" 
    android:id="@+id/drawer_layout" 
    android:layout_width="match_parent" 
    android:layout_height="match_parent"> 

    <!-- The main content view --> 
    <LinearLayout 
     android:id="@+id/main_content_layout" 
     android:layout_width="match_parent" 
     android:layout_height="match_parent" /> 

    <!-- The navigation drawer --> 
    <ListView android:id="@+id/navigational_drawer" 
     android:layout_width="220dp" 
     android:layout_height="match_parent" 
     android:layout_gravity="start" 
     android:choiceMode="singleChoice" 
     android:divider="@android:color/transparent" 
     android:dividerHeight="0dp" 
     android:background="#FFFFFF"/> 
</android.support.v4.widget.DrawerLayout> 

हालांकि, मैं PreferenceActivity आसपास DrawerLayout लपेटकर कठिनाइयों का एक बहुत हो रहा है। वरीयता सक्रियता एक विशेष प्रकार की गतिविधि है जिसे मैं संरक्षित करना चाहता हूं क्योंकि यह मुझे मेरे ऐप में एंड्रॉइड वरीयताओं के स्वरूप और अनुभव को बनाए रखने में मदद करता है; कहा जा रहा है कि यह प्राथमिकताओं को लोड करने के लिए addPreferencesFromResource() कॉल का उपयोग करता है और XML फ़ाइलों को लोड करने के लिए addContentView() कॉल का उपयोग नहीं करता है; वरीयता संसाधनों में आम तौर पर वरीयता स्क्रीन टैग होते हैं जो ड्रॉवरलेआउट में लपेटना पसंद नहीं करते हैं।

किसी को भी उस मुद्दे से निपटना पड़ा और आपने इसे कैसे हल किया? यदि आपके एंड्रॉइड ऐप में वरीयता एक्टिविटी है और आपके पास एक ही गतिविधि पर ड्रॉवरलाउट उपलब्ध है, तो कृपया साझा करें कि आपने यह कैसे किया। कोई भी सहायताकाफी प्रशंसनीय होगी।

संपादित: यदि मैं

<!-- The main content view --> 
<LinearLayout 
    android:id="@+id/main_content_layout" 
    android:layout_width="match_parent" 
    android:layout_height="match_parent" /> 

<ListView 
    android:id="@android:id/list" 
    android:layout_width="fill_parent" 
    android:layout_height="fill_parent" /> 

को बदल तो अनुप्रयोग क्रैश नहीं होता जब PreferenceActivity भरी हुई है (क्योंकि आईडी "सूची" से मेल खाता है क्या पसंद गतिविधि करने की उम्मीद कर रहा है लगता है); हालांकि, दराज नहीं दिख रहा है। यह लगभग है जैसे ListView "सूची" के नीचे सबकुछ अनदेखा हो रहा है।

+0

मैं भी अपनी मौजूदा गतिविधियों को संरक्षित करना चाहता हूं और दराज को गतिशील रूप से जोड़ना चाहता हूं। वरीयता सक्रियता की वजह से नहीं, बल्कि क्योंकि लगभग 100 गतिविधियां हैं और उन्हें सभी टुकड़ों में बदलने में कुछ समय लगेगा। मैं क्षैतिज स्क्रॉलव्यू के साथ ऐसा करने में सक्षम था, लेकिन मुझे लगता है कि ड्रॉवरलाइट बहुत साफ होगा। –

उत्तर

2

इसने मुझे कुछ समय लगा, लेकिन मैं इस ऐप को अपने ऐप के लिए बनाने में सक्षम था। मुझे नहीं पता कि इससे कोई फर्क पड़ता है, लेकिन मैं HoloEverywhere का उपयोग कर रहा हूं, इसलिए मुझे लगता है कि यह मानक PreferenceActivity पर भी काम करेगा।

मेरी PreferenceActivity जब मैं अपने कस्टम DrawerLayout जिसमें आपकी जैसी है और list के मानक एंड्रॉयड आईडी के साथ एक ListView है लोड करने के लिए setContentView() के सभी संस्करणों overrode में। मैं अभी भी loadHeadersFromResource() फोन मेरी अलग PreferenceScreen रों लिए सभी Header रों बनाने के लिए

@Override 
public void setContentView(int layoutResID) 
    { 
    setContentView(getLayoutInflater().inflate(layoutResID)); 
    } 

@Override 
public void setContentView(View view) 
    { 
    setContentView(view, new LayoutParams(LayoutParams.MATCH_PARENT, LayoutParams.MATCH_PARENT)); 
    } 

@Override 
public void setContentView(View view, LayoutParams params) 
    { 

    // inflate the drawer layout 

    super.setContentView(R.layout.navigation_drawer_base_layout); 

    DrawerLayout dl = findViewById(R.id.drawer_layout); 

    // do stuff here initialize the DrawerLayout like add a DrawerToggle, etc 

    ...STUFF 

    // Call onContentsChanged() to let the Activity know it needs to refresh itself. 

    onContentChanged(); 

    } 

onBuildHeaders() में: पिछले विधि में मैं के बाद मैं super.setContentView() बुलाया onContentChanged() कॉल करने के लिए सुनिश्चित किया।

+0

धन्यवाद जॉन। जब से वरीयता सक्रियता देखो और महसूस की नकल करने के लिए मैंने अपनी गतिविधि को आगे बढ़ाया और लागू किया है। मैं आपके उत्तर को "उत्तर" के रूप में चिह्नित करूंगा। – CocoaAficionado

+0

@jon मैं वही कोड लागू करता हूं जैसा कि आप यहां लिखते हैं, लेकिन यह काम नहीं कर रहा है, क्या आप मेरी मदद कर सकते हैं, यहां मेरा प्रश्न है: http://stackoverflow.com/questions/37629855/how-to-set-navigation-drawer -इन-preferenceactivity –

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