Android, wie man 2 Listenansichten in einer Aktivität nacheinander anzeigt

Ich habe diesen Code benutzt, um 2 Listenansicht übereinander anzuzeigen.

<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> 

Das Problem ist, dass dies dazu führt, dass die 2 Listenansichten jeweils die Hälfte des Bildschirms belegen. Ich füge ein Header zu beiden Listen wie folgt hinzu.

 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); 

Ich möchte, dass der Kopf der zweiten Liste nach der ersten Liste erscheint. Wie mache ich das? Wie kann ich die Listenaufrufe so erscheinen lassen, dass der zweite beginnt, wenn der erste vorbei ist? Vielen Dank

  • Wie kann ich eine einzelne Zeile in einer ListView aktualisieren?
  • Android: ListView-Elemente mit mehreren klickbaren Schaltflächen
  • Wie kann man benutzerdefinierte Schrift für android listview setzen?
  • Füge die Fortschrittsanzeige am unteren Rand einer Listenansicht hinzu
  • Zurückgeben von Werten aus der Mehrfachauswahl ListView
  • Benutzerdefinierte Listenansicht mit benutzerdefinierten Header Android
  • Android: Wie zu vermeiden Header aus Scrollen in Listenansicht, Android?
  • Was ist der Zweck von Item-IDs im Android ListView Adapter?
  • 9 Solutions collect form web for “Android, wie man 2 Listenansichten in einer Aktivität nacheinander anzeigt”

    Verwenden Sie wie folgt:

    Lineares Layout entfernen Verwenden Sie das relative Layout und das Innere, in dem Sie Ihre zwei Listenansicht so platzieren.

     <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> 

    Füge Utility.java hinzu

     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(); } } 

    In deiner Aktivität :

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

    Vor dem Scrollen

    Nach dem Scrollen 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(); } } } 

    Sie sollten ExpandableListView ( http://developer.android.com/reference/android/widget/ExpandableListView.html ) verwenden. Sie hätten zwei Abschnitte anstelle von zwei Listenansichten, aber sie (einschließlich Header) werden ausgerichtet, wie Sie beschrieben haben.

    Es ist keine gute Praxis, mehr als eine ListViews in einem einzigen Container zu verwenden. Es verursacht Mess- und Leistungsprobleme. Besser ist es, einzelne ListView mit mehreren Ansichtstypen zu verwenden . In Ihrem Fall können Ansichtstypen sein: listview1_viewtype , listview2_viewtype , listview2_header_viewtype . Für den ersten ListView-Header kannst du nur Header verwenden.

    Wenn Gewichte vorgesehen sind, sollte die Höhe als 0dp oder wrap_content bereitgestellt werden. Aber du tust das nicht. Ändere deine xml-Datei wie unten. Ich hoffe es funktioniert für dich.

    Wie pro Ihren Kommentar Ich bearbeite meine Post nach Anforderung Lösung

    1-: Erstellen Sie eine Listenansicht mit nur 2 Zeilen

    1.1-: Füge eine Listenansicht als Zeilenkind in der ersten Listenansicht # 1 hinzu

    1.2-: Füge eine weitere Listenansicht als zweites Zeilenkind in der ersten Listenansicht # 1 hinzu

    Ich hoffe auf diese Weise können Sie Erfolg erzielen

    Ich bin auch neu auf Android und ich habe etwas Ähnliches bekommen (nicht genau, aber Art von Workaround), aber viel EASIER, indem du eine Layoutdatei machst und die benötigte Anzahl von Listenansichten in sie und ein anderes XML-Layout stellst und das vorher gearbeitete Layout wickelst In scrollView

    Angenommen, Sie haben das Layout namens two_listview_layout.xml definiert als

     <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 ist hier nicht zwingend, aber man kann mit Ihren Anforderungen und den Layouts herumspielen.

    Jetzt noch ein Layout, in dem dieses Layout in ScrollView eingehüllt ist. Da ScrollView nur 1 direktes Kind haben kann, hast du dieses komplette Layout als sein Kind.

    Nennen Sie dieses (unten) Layout als final_layout.xml

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

    Jetzt füge diese final_layout.xml in deinem Fragment / deine Aktivität ein und verwende die IDs, die in der 2_listview_layout.xml benannt wurden, um auf eine der Listenansichten zuzugreifen.

    Ausgabe ist so etwas wie folgt: (entschuldigt sich für die schlechte Qualität des Bildschirmschreibers: p) Trailer und Reviews – beide sind hier Listeneinträge.

    Bildbeschreibung hier eingeben

    Versuche es mit ScrollView und 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)); } 

    Hinzufügen von layout_weight für mich gearbeitet.

     <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> 

    Versuchen Sie mit dem relativen Layout:

     <?xml version="1.0" encoding="utf-8"?> <RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android" android:layout_width="fill_parent" android:layout_height="fill_parent" > <ListView android:id="@+id/listView1" android:layout_width="match_parent" android:layout_height="fill_parent" android:layout_weight="1" android:layout_below="@+id/listView1" 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> </RelativeLayout> 
    Das Android ist ein Google Android Fan-Website, Alles ├╝ber Android Phones, Android Wear, Android Dev und Android Spiele Apps und so weiter.