Android wie 2 Listenansichten in einer Aktivität nacheinander angezeigt werden

Ich habe diesen Code verwendet, um 2 Listenansichten übereinander anzuzeigen.

     

Das Problem ist, dass dies dazu führt, dass die zwei Listenansichten jeweils die Hälfte des Bildschirms einnehmen. Ich füge einen 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 Header der zweiten Liste erscheint, nachdem die erste Liste beendet ist. Wie mache ich das? Wie mache ich die Listenansichten so erscheinen, dass der zweite startet, wenn der erste vorbei ist? Vielen Dank

Verwenden Sie so:

Entfernen Sie das lineare Layout. Verwenden Sie das relative Layout und platzieren Sie Ihre zwei Listenansicht so.

         

füge Dienstprogramm.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 Ihrer Aktivität :

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

Vor dem Scrollen

Nach dem Scrollen activity_main.xml

           

Hauptaktivität.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(this, android.R.layout.simple_list_item_1, data1)); mListView2.setAdapter(new ArrayAdapter(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 würden zwei Abschnitte anstelle von zwei Listenansichten haben, aber sie (einschließlich der Header) werden wie beschrieben ausgerichtet.

Es empfiehlt sich nicht, mehrere ListViews in einem einzelnen Container zu verwenden. Es verursacht Mess- und performancesprobleme. Besser ist es, einzelne ListView mit mehreren View-Typen zu verwenden . In Ihrem Fall könnten View-Typen wie folgt aussehen : listview1_viewtype , listview2_viewtype , listview2_header_viewtype . Für den ersten ListView-Header können Sie nur Header verwenden.

Wenn Gewichte angegeben werden, sollte die Höhe als 0dp oder wrap_content angegeben werden. aber du tust es nicht. Ändern Sie Ihre XML-Datei wie folgt. Ich hoffe es funktioniert für dich.

Laut Ihrem Kommentar bearbeite ich meinen Beitrag nach Bedarf

1-: Erstellen Sie eine Listenansicht mit nur 2 Zeilen

1.1-: Fügen Sie eine Listenansicht als Zeilenuntergruppe in der ersten Listenansicht # 1 hinzu

1.2-: Fügen Sie in der ersten Listenansicht # 1 eine weitere Listenansicht als zweite Zeile hinzu

Ich hoffe, auf diese Weise können Sie Erfolg erzielen.

Versuchen Sie es mit ScrollView und LinearLayout:

activity_main.xml

            

Hauptaktivität.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(this,android.R.layout.simple_list_item_1,android.R.id.text1,data1)); list2.setAdapter(new ArrayAdapter(this,android.R.layout.simple_list_item_1,android.R.id.text1,data2)); } 

Ich bin auch neu in Android und ich habe etwas ähnliches (nicht genau, aber Art von Workaround), aber viel einfacher, indem Sie eine Layout-Datei und die erforderliche Anzahl von Listenansichten und ein anderes XML-Layout und wickeln Sie das zuvor erstellte Layout in ScrollView.

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

     

RelativeLayout ist hier nicht obligatorisch, aber Sie können mit Ihren Anforderungen und den Layouts herumspielen.

Erstellen Sie nun ein anderes Layout, in dem dieses Layout in ScrollView eingeschlossen ist. Da ScrollView nur 1 direktes Kind haben kann, haben Sie dieses komplette Layout als Kind.

Benennen Sie dieses (unten) Layout als final_layout.xml

      

Jetzt blase diese final_layout.xml in deinem Fragment / deiner Aktivität auf und verwende die Ids, die in der Datei two_listview_layout.xml genannt wurden, um auf die Listenansicht zuzugreifen.

Die Ausgabe ist ungefähr so: (Entschuldigung für die schlechte Qualität des Bildschirmrecorders: p) Trailer und Reviews – beides sind hier Listenansichten.

Bildbeschreibung hier eingeben

Das Hinzufügen von layout_weight hat für mich funktioniert.

   

Versuchen Sie es mit dem relativen Layout:

 < ?xml version="1.0" encoding="utf-8"?>