it-swarm.asia

Android كيفية عرض 2 listviews في نشاط واحد تلو الآخر

لقد استخدمت هذا الرمز لعرض قائمة 2 عرض واحد على رأس الآخر.

<LinearLayout xmlns:Android="http://schemas.Android.com/apk/res/Android"
Android:layout_width="fill_parent"
Android:layout_height="fill_parent"
Android:orientation="vertical" >

<ListView
    Android:id="@+id/listView1"
    Android:layout_width="match_parent"
    Android:layout_height="fill_parent"
    Android:layout_weight="1"
    Android:background="#f00" >
</ListView>

<ListView
    Android:id="@+id/listView2"
    Android:layout_width="match_parent"
    Android:layout_height="fill_parent"
    Android:layout_weight="1"
    Android:background="#0f0" >
</ListView>

المشكلة تكمن في أن هذا يؤدي إلى 2 listviews لكل احتلال نصف الشاشة. أقوم بإضافة رأس إلى كلتا القائمتين مثل هذا.

LevelAdapter adapter = new LevelAdapter(getActivity(),
            R.layout.list_item, weather_data);

    View header = inflater.inflate(R.layout.header2, null);
    View header2 = inflater.inflate(R.layout.header, null);
   lv1.addHeaderView(header);
   lv2.addHeaderView(header2);
    lv1.setAdapter(adapter);
    lv2.setAdapter(adapter);

أرغب في ظهور رأس القائمة الثانية بعد انتهاء القائمة الأولى. كيف أفعل هذا؟ كيف يمكنني جعل قوائم العرض تظهر بحيث تبدأ الثانية عندما تنتهي الأولى؟ شكر

41
Shivam Bhalla

استخدم مثل هذا:

إزالة التخطيط الخطي. استخدم نسقًا نسبيًا وداخل هذا المكان ، يمكنك مشاهدة قائمة اثنين مثل هذا.

<ScrollView xmlns:Android="http://schemas.Android.com/apk/res/Android"
Android:layout_width="fill_parent"
Android:layout_height="fill_parent"
Android:id="@+id/scrollojt"
Android:fillViewport="true" >

   <RelativeLayout
Android:layout_width="match_parent"
Android:layout_height="wrap_content" >

<ListView
Android:id="@+id/listView1"
Android:layout_width="match_parent"
Android:layout_height="wrap_content"
Android:background="#f00" >
 </ListView>

 <ListView
Android:id="@+id/listView2"
Android:layout_width="match_parent"
Android:layout_height="wrap_content"
Android:layout_below="@+id/listView1"
Android:background="#0f0" >
</ListView>
    </RelativeLayout>
  </ScrollView>

إضافة الأداة المساعدة. جافا

public class Utility {

    public static void setListViewHeightBasedOnChildren(ListView listView) {
        ListAdapter listAdapter = listView.getAdapter();
        if (listAdapter == null) {
            // pre-condition
            return;
        }

        int totalHeight = 0;
        int desiredWidth = MeasureSpec.makeMeasureSpec(listView.getWidth(), MeasureSpec.AT_MOST);
        for (int i = 0; i < listAdapter.getCount(); i++) {
            View listItem = listAdapter.getView(i, null, listView);
            listItem.measure(desiredWidth, MeasureSpec.UNSPECIFIED);
            totalHeight += listItem.getMeasuredHeight();
        }

        ViewGroup.LayoutParams params = listView.getLayoutParams();
        params.height = totalHeight + (listView.getDividerHeight() * (listAdapter.getCount() - 1));
        listView.setLayoutParams(params);
        listView.requestLayout();
    }
}

في نشاطك:

 lv1.setAdapter(adapter);
 lv2.setAdapter(adapter);

Utility.setListViewHeightBasedOnChildren(lv1);
Utility.setListViewHeightBasedOnChildren(lv2);
45
Nirmal

Before scrolling

After scrolling activity_main.xml

<ScrollView xmlns:Android="http://schemas.Android.com/apk/res/Android"
    Android:layout_width="fill_parent"
    Android:layout_height="wrap_content"
    Android:fillViewport="true" >

    <LinearLayout
        Android:layout_width="match_parent"
        Android:layout_height="wrap_content"
        Android:orientation="vertical"
        Android:padding="10dip" >

        <TextView
            Android:layout_width="match_parent"
            Android:layout_height="wrap_content"
            Android:gravity="center_vertical"
            Android:text="Android" />

        <ListView
            Android:id="@+id/listView1"
            Android:layout_width="match_parent"
            Android:layout_height="wrap_content"
            Android:layout_marginTop="10dip"
            Android:background="#B29090" >
        </ListView>

        <TextView
            Android:layout_width="match_parent"
            Android:layout_height="wrap_content"
            Android:layout_marginTop="10dip"
            Android:gravity="center_vertical"
            Android:text="IOS" />

        <ListView
            Android:id="@+id/listView2"
            Android:layout_width="match_parent"
            Android:layout_height="wrap_content"
            Android:layout_marginTop="10dip"
            Android:background="#4A9C67" >
        </ListView>
    </LinearLayout>

</ScrollView>

MainActivity.Java

package com.example.listviewin1xmldemo;

import Android.os.Bundle;
import Android.support.v7.app.ActionBarActivity;
import Android.view.View;
import Android.view.View.MeasureSpec;
import Android.view.ViewGroup;
import Android.widget.ArrayAdapter;
import Android.widget.ListAdapter;
import Android.widget.ListView;

public class MainActivity extends ActionBarActivity {

    private ListView mListView1, mListView2;

    private String [] data1 ={"Hiren", "Pratik", "Dhruv", "Narendra", "Piyush", "Priyank"};
    private String [] data2 ={"Kirit", "Miral", "Bhushan", "Jiten", "Ajay", "Kamlesh"};

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

        mListView1 = (ListView)findViewById(R.id.listView1);
        mListView2 = (ListView)findViewById(R.id.listView2);

        mListView1.setAdapter(new ArrayAdapter<String>(this, Android.R.layout.simple_list_item_1, data1));
        mListView2.setAdapter(new ArrayAdapter<String>(this, Android.R.layout.simple_list_item_1, data2));

        ListUtils.setDynamicHeight(mListView1);
        ListUtils.setDynamicHeight(mListView2);
    }


    public static class ListUtils {
        public static void setDynamicHeight(ListView mListView) {
            ListAdapter mListAdapter = mListView.getAdapter();
            if (mListAdapter == null) {
                // when adapter is null
                return;
            }
            int height = 0;
            int desiredWidth = MeasureSpec.makeMeasureSpec(mListView.getWidth(), MeasureSpec.UNSPECIFIED);
            for (int i = 0; i < mListAdapter.getCount(); i++) {
                View listItem = mListAdapter.getView(i, null, mListView);
                listItem.measure(desiredWidth, MeasureSpec.UNSPECIFIED);
                height += listItem.getMeasuredHeight();
            }
            ViewGroup.LayoutParams params = mListView.getLayoutParams();
            params.height = height + (mListView.getDividerHeight() * (mListAdapter.getCount() - 1));
            mListView.setLayoutParams(params);
            mListView.requestLayout();
        }
    }
}
100
Hiren Patel

يجب عليك استخدام ExpandableListView ( http://developer.Android.com/reference/Android/widget/ExpandableListView.html ). سيكون لديك قسمين بدلاً من عرضي قائمة ، لكن (بما في ذلك الرؤوس) سيتم محاذاتها كما ذكرت.

9
boro

ليست ممارسة جيدة استخدام أكثر من قائمة واحدة في حاوية واحدة. أنه يسبب مشاكل القياس والأداء. الأفضل استخدام ListView واحد مع عدة أنواع عرض . في أنواع الحالة الخاصة بك ، يمكن أن تكون: listview1_viewtype ، listview2_viewtype ، listview2_header_viewtype . بالنسبة لرأس ListView الأول ، يمكنك استخدام العنوان فقط.

5
Kirill Boyarshinov

عندما يتم توفير الأوزان ، يجب توفير الارتفاع كـ 0dp أو wrap_content. لكنك لا تفعل ذلك. تغيير ملف XML الخاص بك على النحو التالي. آمل أن يعمل من أجلك.

وفقًا لتعليقك ، أقوم بتحرير مشاركتي وفقًا لمتطلبات الحل

1-: قم بإنشاء عرض قائمة به صفان فقط

1.1-: إضافة عرض قائمة كطفل صف في listview الأولى # 1

1.2-: إضافة عرض قائمة آخر كطفل الصف الثاني في listview الأولى # 1

أتمنى بهذه الطريقة أن تحقق النجاح.

2
DynamicMind

جرب باستخدام ScrollView و LinearLayout:

activity_main.xml

 <RelativeLayout xmlns:Android="http://schemas.Android.com/apk/res/Android"
Android:layout_width="match_parent"
Android:layout_height="wrap_content">
   <ScrollView
    Android:layout_width="match_parent"
    Android:layout_height="wrap_content"
    Android:layout_below="@+id/action_bar1"
    Android:fillViewport="true">

    <LinearLayout
        Android:layout_width="match_parent"
        Android:layout_height="wrap_content"
        Android:orientation="vertical"
        Android:padding="10dip">

        <ListView
            Android:id="@+id/listView1"
            Android:layout_width="match_parent"
            Android:layout_height="200dip"
            Android:layout_margin="10dip"
            Android:background="#B29090">
        </ListView>



        <ListView
            Android:id="@+id/listview2"
            Android:layout_width="match_parent"
            Android:layout_height="200dip"
            Android:layout_margin="10dip"
            Android:background="#4A9C67">
        </ListView>
    </LinearLayout>
</ScrollView>
</RelativeLayout>

MainActivity.Java

 private ListView list1, list2;
private String [] data1 ={"H", "P", "D", "N", "P", "P"};
private String [] data2 ={"K", "M", "B", "K", "A", "K"};
 @Override
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_sounds);
    list1 = (ListView) findViewById(R.id.listView1);
    list2 = (ListView) findViewById(R.id.listview2);

    list1.setAdapter(new ArrayAdapter<String>(this,Android.R.layout.simple_list_item_1,Android.R.id.text1,data1));
    list2.setAdapter(new ArrayAdapter<String>(this,Android.R.layout.simple_list_item_1,Android.R.id.text1,data2));



}
1
Adam

أنا جديد على Android أيضًا وحصلت على شيء مشابه (ليس بالضبط ولكن نوع من الحل) ولكن أسهل بكثير ، من خلال إنشاء ملف تخطيط ووضع العدد المطلوب من طرق عرض القائمة فيه و تخطيط XML آخر ولف التخطيط الذي تم إنشاؤه مسبقًا في ScrollView.

افترض أن لديك تخطيطًا باسم two_listview_layout.xml تم تعريفه على أنه

<RelativeLayout
..>
    <ListView
        Android:id="@+id/listViewOne"
        Android:layout_width="match_parent"
        Android:layout_height="wrap_content"/>
    <ListView
        Android:id="@+id/listViewTwo"
        Android:layout_width="match_parent"
        Android:layout_width="wrap_content"/>
</RelativeLayout>

RelativeLayout ليست إلزامية هنا ، ولكن يمكنك أن تلبي متطلباتك والتخطيطات.

الآن قم بعمل تخطيط آخر يتم فيه تغليف هذا التنسيق في ScrollView. نظرًا لأن ScrollView يمكن أن يكون له طفل واحد مباشر فقط ، سيكون لديك هذا التصميم الكامل كطفل له.

اسم هذا (أدناه) تخطيط كـ final_layout.xml

<FrameLayout
...>
    <ScrollView
        Android:layout_width="match_parent"
        Android:layout_height="wrap_content">
        <include layout="@layout/two_listview_layout" />
    </ScrollView>
</FrameLayout>

الآن ، قم بتضخيم final_layout.xml هذا في الجزء/النشاط الخاص بك واستخدم المعرفات التي تمت تسميتها في two_listview_layout.xml للوصول إلى أي من قوائم العرض.

الإخراج هو شيء من هذا القبيل: (الاعتذار عن الجودة السيئة لمسجل الشاشة: ع) المقطورات والمراجعات - وكلاهما استعراض القائمة هنا.

enter image description here

1
T.M

مضيفا layout_weight عملت بالنسبة لي.

<ListView
    Android:id="@+id/excerciseListView"
    Android:layout_width="match_parent"
    Android:layout_height="0px"
    Android:divider="#B6B6B6"
    Android:dividerHeight="1sp"
    Android:layout_weight="3"></ListView>
<ListView
    Android:id="@+id/instructionListView"
    Android:layout_width="match_parent"
    Android:layout_height="0px"
    Android:divider="#B6B6B6"
    Android:dividerHeight="1sp" 
   Android:layout_weight="1"></ListView>
0
Trideep Rath