2013-05-02 1 views
6

मुझे पता है कि हर किसी ने सिफारिश की है कि हमें कभी भी ListView और ScrollView का उपयोग कभी नहीं करना चाहिए, और मैं पूरी तरह से सहमत हूं। हालांकि, मैं वर्तमान में 8tracks प्रोफाइल पेज (जैसा कि नीचे दी गई छवि में दिखाया गया है) के साथ एक बहुत ही सरल पैटर्न के साथ अटक गया है, जिसमें उपयोगकर्ता प्रोफ़ाइल के लिए एक क्षेत्र और उनके द्वारा बनाए गए मिश्रणों की एक सूची शामिल है। तो बुनियादी तौर पर, यह वांछनीय है कि उपयोगकर्ताओं को सिर्फ इतना है कि पेज, जिसका अर्थ है प्रोफ़ाइल हिस्सा दृश्य से बाहर स्क्रीन के शीर्ष पर मिलता है और धीरे-धीरे होगा नीचे स्क्रॉल कर सकते हैं और एक ही समय में नीचे दी गई सूची भी स्क्रॉल किया जाता है:एंड्रॉइड - एक लाइनरलाइट बनाएं जिसमें एक सूची दृश्य स्क्रॉल करने योग्य

enter image description here

हालांकि, फिलहाल, मैं LinearLayout के भीतर, यहां अपने स्केच की तरह ही शामिल कर सकता हूं।

enter image description here

इस डिजाइन के साथ

, मैं केवल डाउन सूची स्क्रॉल कर सकते हैं, जबकि प्रोफाइल क्षेत्र एक ही जगह है, जो बेकार में रहता है। तो मैं पूरी सूची को स्क्रॉल करने योग्य बनाने के लिए किसी भी विचार की तलाश में हूं, सिर्फ सूची ही नहीं। कृपया मदद करें और धन्यवाद।

संपादित: मुझे भ्रामक प्रश्न के लिए खेद है। मेरी समस्या और भी जटिल है क्योंकि टैब की सामग्री केवल ListView नहीं है - कुछ टैब में LinearLayout या GridView इसके बजाय है। दोबारा, मैं जो हासिल करना चाहता हूं वह पूरे पृष्ठ को स्क्रॉल करने योग्य बनाना है, लेकिन ScrollView मदद नहीं कर सकता है क्योंकि यदि टैब की सामग्री ListView या GridView है, तो इन विचारों को ध्वस्त कर दिया जाएगा और अधिक महत्वपूर्ण बात यह है कि यह डिज़ाइन नियम के विरुद्ध है।

उत्तर

1

मुझे पता है कि यह देर हो चुकी है, लेकिन मैं 8tracks के लिए वर्तमान डेवलपर हूं। उपरोक्त दिखाए गए पुराने (2.x) 2.x ऐप को फिर से लिखा जा रहा है, लेकिन मैं आपको दिखा सकता हूं कि पुराने पृष्ठ ने प्रोफाइल पेज के लिए क्या किया था।

उसमें जाने से पहले मुझे यह कहना होगा कि ऐसा करने का यह सबसे अच्छा तरीका नहीं है, लेकिन 8tracks ऐप (2.x) पुराना है।

तो कोड पर वापस ... ProfileActivity में ProfileFragment है।

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

    <!-- Image, name, location --> 

    <RelativeLayout 
     android:layout_width="match_parent" 
     android:layout_height="wrap_content" 
     android:orientation="horizontal" 
     android:padding="10dip" > 

     <com.gdub.widget.ImageViewClickable 
      android:id="@+id/dj_avatar" 
      android:layout_width="110dip" 
      android:layout_height="110dip" 
      android:layout_marginRight="10dip" 
      android:background="@drawable/default_avatar_max200" 
      android:scaleType="centerCrop" /> 

     <com.gdub.widget.CollapsingTextView 
      android:id="@+id/dj_location" 
      style="@style/mix.counts" 
      android:layout_width="wrap_content" 
      android:layout_height="wrap_content" 
      android:layout_marginBottom="10dip" 
      android:layout_toRightOf="@id/dj_avatar" /> 

     <ViewSwitcher 
      android:id="@+id/profile_action_btn" 
      android:layout_width="match_parent" 
      android:layout_height="wrap_content" 
      android:layout_below="@id/dj_location" 
      android:layout_toRightOf="@id/dj_avatar" > 

      <Button 
       android:id="@+id/follow_btn" 
       style="@style/white_button" 
       android:layout_width="wrap_content" 
       android:layout_height="wrap_content" 
       android:text="@string/follow" /> 

      <Button 
       android:id="@+id/edit_profile_btn" 
       style="@style/white_button" 
       android:layout_width="wrap_content" 
       android:layout_height="wrap_content" 
       android:text="@string/edit_profile" /> 
     </ViewSwitcher> 
    </RelativeLayout> 

    <TextView 
     android:id="@+id/dj_bio" 
     android:layout_width="match_parent" 
     android:layout_height="wrap_content" 
     android:layout_marginBottom="-25dip" 
     android:gravity="left|center_vertical" 
     android:lineSpacingExtra="2dip" 
     android:paddingLeft="10dip" 
     android:paddingRight="10dip" 
     android:textColor="@color/default_text" 
     android:textSize="15sp" /> 

    <include 
     android:id="@+id/profile_tabs" 
     layout="@layout/profile_tabs" /> 

</LinearLayout> 

और profile_tabs ...

<?xml version="1.0" encoding="utf-8"?> 
<LinearLayout 
    xmlns:android="http://schemas.android.com/apk/res/android" 
    android:layout_width="match_parent" 
    android:layout_height="wrap_content" 
    android:visibility="gone" 
    android:orientation="horizontal"> 

    <include 
     android:id="@+id/profile_mixes_button" 
     layout="@layout/profile_tab" /> 

    <include 
     android:id="@+id/profile_followers_button" 
     layout="@layout/profile_tab" /> 

    <include 
     android:id="@+id/profile_following_button" 
     layout="@layout/profile_tab" /> 

</LinearLayout> 

तो आप इसे तीन के साथ एक नियमित लेआउट देख सकते हैं के रूप में:

आप अनुसरण करें बटन (और प्रोफ़ाइल छवि) के साथ देखने के मुख्य लेआउट यह है बटन "अनुकरण" टैब।

टैब की सामग्री को भी एक ViewSwitcher से निर्धारित होता:

<?xml version="1.0" encoding="utf-8"?> 
<ViewSwitcher xmlns:android="http://schemas.android.com/apk/res/android" 
       android:id="@+id/profile_view_switcher" 
       android:layout_width="match_parent" 
       android:layout_height="match_parent" 
       android:inAnimation="@anim/fade_in_300" 
       android:outAnimation="@anim/fade_out_300" 
       android:background="@color/white"> 

<include 
    android:id="@+id/profile_loading" 
    layout="@layout/loading_view_full" /> 

<ListView 
    android:id="@+id/profile_content_list" 
    android:layout_width="match_parent" 
    android:layout_height="match_parent" 
    android:cacheColorHint="#00000000" 
    android:divider="@null" 
    android:dividerHeight="0dip" 
    android:fadingEdge="none" /> 

</ViewSwitcher> 

यह एक लोड हो रहा है पहिया चलता है और फिर सूचीदृश्य में चला जाएगा। कोई अन्य स्क्रोल करने योग्य व्यू ग्रुप नहीं है।

और यह मूल रूप से यह है।

अब यदि आप WHOLE चीज़ स्क्रॉल करना चाहते हैं, तो आपको कस्टम एडाप्टर का उपयोग करने और उपरोक्त लेआउट को हेडर के रूप में सेट करने की आवश्यकता है (या कम से कम एडाप्टर में GetEtemType को चालाक तरीके से उपयोग करें)। इस तरह पूरी स्क्रीन एक सूची है (एक सूची में सभी अनुकूलन के साथ)।

हम (एबी) देव के तहत नए 8tracks ऐप में इसका उपयोग करते हैं। ;)

+1

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

+0

आपका स्वागत है! :) –

1

अपनी सूचीदृश्य पर निम्नलिखित का उपयोग करने का प्रयास करें।

listview.addHeaderView(v); 

यह भी याद रखें, आपको अपनी सूचीदृश्य पर setAdapter() को कॉल करने से पहले इस विधि को कॉल करना होगा।

में आपके लाइनरलेआउट शामिल हैं जहां आपके पास उपयोगकर्ता का विवरण और टैब हैं और इसे सूची में शीर्षलेख के रूप में जोड़ें।

+0

यह एक शर्म की बात है जिसे मैंने कभी नहीं सीखा, इसलिए मुझे प्रबुद्ध करने के लिए धन्यवाद। लेकिन दुख की बात यह है कि यह मेरी ज़रूरत के अनुरूप नहीं है क्योंकि वास्तव में केवल मेरे टैब में से केवल एक सूची दृश्य है और अन्य में ग्रिड व्यू और लीनियर व्यू शामिल है, इसलिए मुझे टैब को प्रत्येक के रूप में टैब जोड़ने के बजाय टैब में एक टुकड़े के रूप में जोड़ना होगा। सूची दृश्य। –

0

आप प्रोफाइल और टैब को सूचीदृश्य के शीर्षलेख बनाने की कोशिश कर सकते हैं, फिर टैब दबाए जाने पर सूचीदृश्य की सामग्री अपडेट कर सकते हैं। मुझे नहीं पता कि क्या आप चाहते हैं कि टैब स्क्रॉल के रूप में गायब हो जाएं, हालांकि आप स्क्रॉल करते हैं।

+0

यह मेरे लिए भ्रमित है, क्योंकि मेरे सभी टैब में एक सूचीदृश्य नहीं है। अगर मुझे लगता है कि पहले टैब में 'लीनियरलाउट' है और केवल दो अन्य में 'ListView' है तो मुझे क्या करना चाहिए? –

0

यूआई गाइड लाइनों और सर्वोत्तम प्रथाओं के अनुसार, सलाह दी जाती है कि स्क्रॉलव्यू के अंदर स्क्रॉल करने योग्य सामग्री का उपयोग न करें और ऐसा करने से स्क्रॉल करने योग्य सामग्री की स्क्रॉलिंग रोकती है।

जब आप दो स्क्रॉलव्यू एंड्रॉइड डालते हैं तो बस उलझन में रहें जो स्क्रॉल व्यू छुआ है। तो कभी-कभी यह टच इवेंट देने में असमर्थ हो जाता है।

लेकिन यदि आप अभी भी स्क्रॉलिंग कार्यक्षमता प्राप्त करना चाहते हैं तो आप इसे विशेष दृश्य के ऑन टच ईवेंट का उपयोग करके प्रबंधित कर सकते हैं। और आपको तदनुसार अपना लेआउट डिज़ाइन करने की आवश्यकता है।

लेकिन अगर आवश्यकता आपको ऐसे लेआउट करने के लिए मजबूर करती है। इसे आज़माएं ...

कहें कि मामला कुछ हद तक है ...।

<ScrollView android:id=”@+id/parent_scroll” 
     android:layout_width=”fill_parent” 
     android:layout_height=”wrap_content” 
     android:layout_weight=”1″ 
     android:background=”@drawable/dotted_bg” 
     android:focusableInTouchMode=”false”> 
        <LinearLayout /> 
        <LinearLayout /> 
        <LinearLayout > 
        <ScrollView android:id=”@+id/child_scroll” 
        android:layout_width=”fill_parent” 
        android:layout_height=”fill_parent” 
        android:background=”@drawable/text_box_bg”> 
       <TextView android:id=”@+id/text_description” 
        android:layout_width=”fill_parent” 
        android:layout_height=”fill_parent” 
        android:textColor=”@color/gray” 
        android:textSize=”12dip” 
        android:padding=”5dip” 
        android:scrollbars=”vertical”/> 
       <!–ScrollView> 
       </LinearLayout> 

चरण 1: दोनों scrollview के लिए अद्वितीय आईडी प्रदान करें।

चरण 2: अपनी गतिविधि में उन दो स्क्रॉलव्यू का संदर्भ प्राप्त करें।

parentScroll=(ScrollView)findViewById(R.id.parent_scroll); 
    childScroll=(ScrollView)findViewById(R.id.child_scroll); 

चरण 3: दोनों के लिए स्पर्श श्रोताओं अब निर्धारित किया है।

parentScroll.setOnTouchListener(new View.OnTouchListener() { 
      public boolean onTouch(View v, MotionEvent event) { 
       Log.v(TAG,”PARENT TOUCH”); 
    findViewById(R.id.child_scroll).getParent().requestDisallowInterceptTouchEvent(false); 
       return false; 
      } 
     }); 
     childScroll.setOnTouchListener(new View.OnTouchListener() { 
      public boolean onTouch(View v, MotionEvent event) 
      { 
       Log.v(TAG,”CHILD TOUCH”); 
            // Disallow the touch request for parent scroll on touch of child view 
       v.getParent().requestDisallowInterceptTouchEvent(true); 
       return false; 
      } 
     }); 

मुझे आशा है कि यह आप में मदद मिलेगी।

+0

विस्तृत उत्तर के लिए धन्यवाद, लेकिन मुझे लगता है कि आप मेरे प्रश्न को गलत समझते हैं (शायद यह मेरी गलती है क्योंकि शीर्षक भ्रामक लगता है)। मैं जो हासिल करना चाहता हूं वह पूरे पृष्ठ को स्क्रॉल करने में सक्षम होना है, न केवल पृष्ठ का हिस्सा, इसलिए बच्चे को एक स्क्रॉल करने योग्य बनाने के लिए पैरेंट स्क्रॉल को अक्षम करना एक लाइनरलेआउट के भीतर एक सूचीदृश्य जोड़ने जैसा है, जो मेरे लिए वांछनीय नहीं है। –

+0

आप वास्तव में क्या हासिल करना चाहते हैं? क्या आप अपनी सूची दृश्य और पूरे लेआउट को स्क्रॉल करने योग्य बनाना चाहते हैं? – GrIsHu

+0

मैंने अभी अपना प्रश्न और शीर्षक भी संपादित किया है, इसलिए कृपया इसे देखें। इसके अलावा, अगर आपके पास बेहतर डिज़ाइन के लिए कोई सुझाव है, तो मुझे और भी सराहना की जाएगी। –

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