使用两个listView使活动可滚动

时间:2016-12-27 10:57:45

标签: android

我在lisView中有两个RelativeLayout,当第一个列表超过第二个列表时,屏幕下移,当我将屏幕更改为景观模式时,第二个列表再次下降。所以我想让屏幕可滚动。

  

这是我的xml代码,

<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:tools="http://schemas.android.com/tools"
android:layout_width="match_parent"
android:layout_height="wrap_content"
tools:context="com.neemshade.moneyflow.phase1.MainActivity$PlaceholderFragment">

    <TextView
        android:id="@+id/purchase"
        android:layout_centerHorizontal="true"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:text="PURCHASE"/>

    <ListView
        android:id="@+id/outstandingPurchaseList"
        android:paddingTop="3dp"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_below="@+id/purchase"
        android:scrollbars="none">

    </ListView>


    <TextView
        android:id="@+id/sale"
        android:layout_centerHorizontal="true"
        android:paddingTop="50dp"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:text="SALE"
        android:layout_below="@+id/outstandingPurchaseList"/>


    <ListView
        android:id="@+id/outstandingSaleList"
        android:paddingTop="3dp"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_below="@+id/sale"
        android:scrollbars="none">

    </ListView>

2 个答案:

答案 0 :(得分:2)

使用两个ListView并一次滚动页面是不好的做法,可能会导致性能问题。尝试使用仅嵌入ListView和ScrollView的NestedScrollView。

参考此链接: https://developer.android.com/reference/android/support/v4/widget/NestedScrollView.html

答案 1 :(得分:1)

你正在使用的那个并不是最好的做法。具有相同滚动方向的多个滚动项通常很复杂。

第一个也许更简单的解决方案可能是使用单个ListView而不是两个。

要实现此目的,您可以创建包含两个项目值的generic object

示例:

class myItem1{
  private String name;
  private int age;
  //...
}

class MyItem2{
  private String surname;
  private boolean male;
  //...
}

现在创建一个包含两个对象变量的新class

class MyGenericItem{
  private boolean isItem1;
  private String name;
  private int age;
  private String surname;
  private boolean male;

  //could be useful creating the two constructors accepting the items
  public MyGenericItem(MyItem1 item){
    this.name = item.name;
    this.age = item.age;
    this.isItem1 = true;
  }
  public MyGenericItem(MyItem2 item){
    this.surname = item.surname;
    this.male = item.male;
    this.isItem1 = false;
  }
  //...

现在,当您创建要放在list of items中的list时,请执行以下操作。

ArrayList<MyGenericItem> items = new ArrayList();
//now add all Items1 as MyGenericItem (cast them) to the list
//now add all Items2 as MyGenericItem (cast them) to the list

现在创建adapter接受此新Generic Item并在adapter内部管理,如果该项为Item1或者Item2(使用布尔值) )。

您需要创建一个layout,其中包含两种可能性并更改可见性和fields's names,具体取决于该项目是Item1还是Item2

另一种可能性是使用LinearLayout而不是ListView

通过这种方式,您只需使用两个LinearLayout,它们将被放置在另一个之下。 You can refer from this SO question on how to use a LinearLayout as a listview。结果将是相同的,它们会滚动,但由于它们是LinearLayouts,它们将滚动到第一个结尾,然后显示第二个。

希望这会有所帮助,祝你好运。