2013-07-08 101 views
2

在我的应用程序中,我有一些按钮和一个带有不同布局的列表视图,列表视图处于最后位置。在Android中使用ListView滚动LinearLayout

我的问题是我附加ScrollView作为根布局,所以滚动是正确完成的。但ListView只能看到一个列表项并且不滚动。

布局:

<?xml version="1.0" encoding="utf-8"?> 
<ScrollView xmlns:android="http://schemas.android.com/apk/res/android" 
    android:id="@+id/taskscrollviewid" 
    android:layout_width="match_parent" 
    android:layout_height="fill_parent" 
    android:fillViewport="true" > 

    <LinearLayout 
     android:layout_width="fill_parent" 
     android:layout_height="fill_parent" 
     android:orientation="vertical" 
     android:scrollbars="vertical" > 

     <LinearLayout 
      android:layout_width="match_parent" 
      android:layout_height="wrap_content" 
      android:layout_marginTop="10dp" 
      android:orientation="horizontal" 
      android:weightSum="2" > 

      <Button 
       android:id="@+id/txtdate" 
       android:layout_width="0dip" 
       android:layout_height="30px" 
       android:layout_weight="1" 
       android:background="@drawable/taskbuttonselector" /> 

      <Button 
       android:id="@+id/btnTaskTimeid" 
       android:layout_width="0dip" 
       android:layout_height="30px" 
       android:layout_weight="1" 
       android:background="@drawable/taskbuttonselector" /> 
     </LinearLayout> 

     <FrameLayout 
      android:layout_width="match_parent" 
      android:layout_height="wrap_content" 
      android:layout_marginTop="10dp" 
      android:orientation="horizontal" > 

      <EditText 
       android:id="@+id/txtItem" 
       android:layout_width="fill_parent" 
       android:layout_height="wrap_content" 
       android:background="@drawable/edittextselector" 
       android:drawableEnd="@drawable/inbox" 
       android:gravity="top|left" 
       android:hint="Enter task" 
       android:inputType="textMultiLine" 
       android:maxLines="5" 
       android:minLines="3" 
       android:scrollbars="vertical" 
       android:singleLine="false" /> 

      <ImageButton 
       android:id="@+id/imagebuttonid" 
       android:layout_width="31dp" 
       android:layout_height="36dp" 
       android:layout_gravity="right|bottom" 
       android:background="@drawable/inbox" /> 
     </FrameLayout> 

     <LinearLayout 
      android:layout_width="match_parent" 
      android:layout_height="wrap_content" 
      android:layout_marginTop="10dp" 
      android:orientation="horizontal" 
      android:weightSum="2" > 

      <Button 
       android:id="@+id/btnaddcategoryid" 
       android:layout_width="0dip" 
       android:layout_height="30px" 
       android:layout_weight="1" 
       android:background="@drawable/taskbuttonselector" 
       android:text="AddCategory" /> 

      <Button 
       android:id="@+id/btnaddseverityid" 
       android:layout_width="0dip" 
       android:layout_height="30px" 
       android:layout_weight="1" 
       android:background="@drawable/taskbuttonselector" 
       android:text="AddSeverity" /> 
     </LinearLayout> 

     <Button 
      android:id="@+id/btnadddb" 
      android:layout_width="250px" 
      android:layout_height="30px" 
      android:layout_gravity="center|center_horizontal" 
      android:layout_marginTop="10dp" 
      android:background="@drawable/taskbuttonselector" 
      android:text="Add This Task" /> 

     <LinearLayout 
      android:layout_width="match_parent" 
      android:layout_height="wrap_content" 
      android:layout_marginTop="10dp" 
      android:orientation="horizontal" 
      android:weightSum="2" > 

      <Button 
       android:id="@+id/fillbut" 
       android:layout_width="0dip" 
       android:layout_height="30px" 
       android:layout_weight="1" 
       android:background="@drawable/taskbuttonselector" 
       android:text="Remain Task" /> 

      <Button 
       android:id="@+id/remainbut" 
       android:layout_width="0dip" 
       android:layout_height="30px" 
       android:layout_weight="1" 
       android:background="@drawable/taskbuttonselector" 
       android:text="Finish Task" /> 
     </LinearLayout> 

     <ListView 
      android:id="@+id/listid" 
      android:layout_width="fill_parent" 
      android:layout_height="wrap_content" 
      android:layout_marginTop="10dp" 
      android:clickable="true" 
      android:orientation="vertical" > 
     </ListView> 
    </LinearLayout> 

</ScrollView> 
+3

Android开发中的顶级罪孽,快速移除它,并将其放置在滚动视图外 –

+0

请看看这个回答ř [此处输入链路描述] [1] [1]:http://stackoverflow.com/questions/17524319/hidden-listview-not-showing-all-elements/ 17524551#17524551 – farrukh

+0

http://stackoverflow.com/questions/17449391/scroll-view-is-not-working-in-list-view/17449541#17449541/检查thuis – Raghunandan

回答

2

添加

android:layout_marginLeft="10dp" 
android:layout_height = "200dp" 

ListView

+0

这不是一个正确的答案..我不知道他为什么给你正确的答案马克..它只是一个静态代码哈哈检查我的答案 –

+0

它不是一个正确的answer.mate – Ghimire

1

只需要创建一个类

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

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

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

,然后在你的活动,设置适配器后,请填写以下

Utility.setListViewHeightBasedOnChildren(yourListview); 
+0

Nooooo ...不要这样做......严肃地说,永远不要这样做......迟早的设备将会失去记忆。如果你这样做,'ListView'的整个目的就被着火了。 –

0

还有就是ScrollViewListView之间的冲突。一般来说,您不能将ListView放入ScrollView。 ListView已经理解了滚动并将自动滚动。

我几天前面临同样的问题。这是我的问题ScrollView distrubing ListView inside of LinearLayout

this回答@David Wasser我重新考虑我的布局设计。

0

尝试这个 -

myList = (ListView) findViewById(R.id.listView); 
       myList.setAdapter(new ArrayAdapter<String>(this,android.R.layout.simple_list_item_1, listview_array)); 
       Helper.getListViewSize(myList); 

And- 
public class Helper { 
    public static void getListViewSize(ListView myListView) { 
     ListAdapter myListAdapter = myListView.getAdapter(); 
     if (myListAdapter == null) { 
      //do nothing return null 
      return; 
     } 
     //set listAdapter in loop for getting final size 
     int totalHeight = 0; 
     for (int size = 0; size < myListAdapter.getCount(); size++) { 
      View listItem = myListAdapter.getView(size, null, myListView); 
      listItem.measure(0, 0); 
      totalHeight += listItem.getMeasuredHeight(); 
     } 
     //setting listview item in adapter 
     ViewGroup.LayoutParams params = myListView.getLayoutParams(); 
     params.height = totalHeight + (myListView.getDividerHeight() * (myListAdapter.getCount() - 1)); 
     myListView.setLayoutParams(params); 
     // print height of adapter on log 
     Log.i("height of listItem:", String.valueOf(totalHeight)); 
    } 
} 

你可以参考这篇文章须─ Androidhub4you-

+0

这是工作代码请试试这个演示.. –

+1

为了上帝的缘故,不要传播这种疾病的代码... –

+0

你是对的M. –

0

最简单的办法。只有使用列表视图,滚动型是一个给填充至底部

<ListView 
       android:id="@+id/lv_Jobs" 
       android:layout_width="match_parent" 
       android:layout_height="wrap_content" 
       android:checkMark="?android:attr/listChoiceIndicatorMultiple" 
       android:gravity="center_vertical" 
       android:paddingLeft="10dp" 
       android:smoothScrollbar="true" 
       android:paddingBottom="50dp" 
       android:textColor="#000000" />