我在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>
答案 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
,它们将滚动到第一个结尾,然后显示第二个。
希望这会有所帮助,祝你好运。