31

我有两个列表视图,但它们不滚动。我该如何纠正?

这是我的layout.xml

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

        <RelativeLayout
            android:layout_width="fill_parent"
            android:layout_height="wrap_content"
            android:background="@drawable/backgrund" >

            <!-- Header  Starts -->

            <LinearLayout
                android:id="@+id/header"
                android:layout_width="fill_parent"
                android:layout_height="40dip"
                android:layout_alignParentTop="true"
                android:background="@layout/header" >
            </LinearLayout>

            <!-- Header Ends -->
            <!-- Footer Start -->

            <TextView
                android:id="@+id/textAD"
                android:layout_width="wrap_content"
                android:layout_height="wrap_content"
                android:layout_alignBottom="@+id/header"
                android:layout_alignParentRight="true"
                android:layout_marginBottom="14dp"
                android:layout_marginRight="26dp"
                android:text="Small Text"
                android:textAppearance="?android:attr/textAppearanceSmall"
                android:textColor="#FFFFFF" />

            <ImageView
                android:layout_width="fill_parent"
                android:layout_height="wrap_content"
                android:layout_below="@+id/header"
                android:layout_gravity="center_horizontal"
                android:focusable="false"
                android:paddingBottom="5px"
                android:paddingTop="10px"
                android:src="@android:drawable/divider_horizontal_bright" />

            <View
                android:layout_width="fill_parent"
                android:layout_height="1dip"
                android:background="#000000"
                android:focusable="false" />

            <LinearLayout
                xmlns:android="http://schemas.android.com/apk/res/android"
                android:id="@+id/linearLayout1"
                android:layout_width="match_parent"
                android:layout_height="match_parent"
                android:layout_below="@+id/header"
                android:orientation="vertical" >

                <TextView
                    android:id="@+id/textm"
                    android:layout_width="match_parent"
                    android:layout_height="wrap_content"
                    android:text="Malzemeler" 
                    android:textSize="20dp"
                    android:textColor="#000000"/>

                <EditText
                    android:id="@+id/editaramalzeme"
                    android:layout_width="match_parent"
                    android:layout_height="wrap_content"
                    android:ems="10" />

                <Button
                    android:id="@+id/btnmalzlist"
                    android:layout_width="match_parent"
                    android:layout_height="wrap_content"
                    android:focusable="false"
                    android:text="Ara" />

                <ListView
                    android:id="@+id/mylist"
                    android:layout_width="match_parent"
                    android:layout_height="420dp"
                    android:layout_weight="1"
                    android:background="#FFFFFF" >
                </ListView>

                <ListView
                    android:id="@+id/listsecili"
                    android:layout_width="wrap_content"
                    android:layout_height="210dp"
                    android:layout_weight="1"
                    android:background="#FFFFFF"  >
                </ListView>

                <EditText
                    android:id="@+id/txtNot"
                    android:layout_width="match_parent"
                    android:layout_height="88dp"
                    android:ems="10"
                    android:gravity="top"
                    android:inputType="textMultiLine"
                    android:lines="6"
                    android:singleLine="false" >

                    <requestFocus />
                </EditText>
            </LinearLayout>

            <Button
                android:id="@+id/btnkaydet"
                android:layout_width="wrap_content"
                android:layout_height="wrap_content"
                android:layout_alignParentLeft="true"
                android:layout_below="@+id/linearLayout1"
                android:text="malzeme ekle" />

            <Button
                android:id="@+id/btntoplugonder"
                style="?android:attr/buttonStyleSmall"
                android:layout_width="wrap_content"
                android:layout_height="wrap_content"
                android:layout_alignRight="@+id/textAD"
                android:layout_below="@+id/btnkaydet"
                android:text="toplu gonder" />
        </RelativeLayout>

    </ScrollView>**
4

10 回答 10

81

从来不装ListView。本身是可滚动的。ScrollViewListView

于 2012-12-03T08:37:57.540 回答
13

默认情况下 ListView 是可滚动的。不要把 ScrollView 放到 ListView

于 2012-12-03T10:37:22.257 回答
6

实际上它不好做。但如果你想这样做,只需将 listview 的高度固定为 wrap_content。

android:layout_height="wrap_content"
于 2012-12-03T08:50:57.913 回答
6

我知道这个问题已经有 4-5 年的历史了,但这可能还是有用的:

有时,如果您只有几个“退出屏幕”的元素,列表可能不会滚动。那是因为操作系统并不认为它实际上超出了屏幕。

我这样说是因为我今天遇到了这个问题——我只有 2 或 3 个超出屏幕限制的元素,而且我的列表不可滚动。这是一个真正的谜。一旦我添加了一些,它就开始滚动。

所以你必须首先确保它不是设计问题,就像列表看起来超出屏幕边界但实际上“它没有”,并调整它的尺寸和边距值,看看它是否开始“变得可滚动”。对我来说确实如此。

于 2016-12-05T15:23:17.797 回答
5

您不应该将 ListView 放在 ScrollView 中,因为 ListView 类实现了自己的滚动,并且它只是不接收手势,因为它们都由父 ScrollView 处理

于 2012-12-03T08:47:19.200 回答
3

这是我的工作代码。你可以试试这个。

行.xml

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout  xmlns:android="http://schemas.android.com/apk/res/android"
        android:id="@+id/listEmployeeDetails"
        android:layout_height="match_parent" 
        android:layout_width="match_parent"
        android:layout_marginTop="5dp"
        android:layout_marginBottom="5dp"
        android:layout_gravity="center"
        android:background="#ffffff">

        <TextView android:id="@+id/tvEmpId"
                      android:layout_height="wrap_content"
                      android:textSize="12sp"
                      android:padding="2dp"
                      android:layout_width="0dp"
                      android:layout_weight="0.3"/>
            <TextView android:id="@+id/tvNameEmp"
                      android:layout_height="wrap_content"
                      android:textSize="12sp"                     
                      android:padding="2dp"
                      android:layout_width="0dp"
                      android:layout_weight="0.5"/>
             <TextView
                    android:layout_height="wrap_content"
                    android:id="@+id/tvStatusEmp"
                    android:textSize="12sp"
                    android:padding="2dp"
                    android:layout_width="0dp"
                    android:layout_weight="0.2"/>               
</LinearLayout> 

详细信息.xml

<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:id="@+id/listEmployeeDetails"
    android:layout_width="fill_parent"
    android:layout_height="fill_parent"
    android:background="@color/page_bg"
    android:orientation="vertical" >
    <LinearLayout
        android:id="@+id/lLayoutGrid"
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:background="@color/page_bg"
        android:orientation="vertical" >

        ................... others components here............................

        <ListView
            android:id="@+id/listView"
            android:layout_width="match_parent"
            android:layout_height="wrap_content"
            android:alwaysDrawnWithCache="true"
            android:dividerHeight="1dp"
            android:horizontalSpacing="3dp"
            android:scrollingCache="true"
            android:smoothScrollbar="true"
            android:stretchMode="columnWidth"
            android:verticalSpacing="3dp" 
            android:layout_marginBottom="30dp">
        </ListView>
    </LinearLayout>
</RelativeLayout>

适配器类:

import java.util.List;

import android.app.Activity;
import android.content.Context;
import android.graphics.Color;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;
import android.widget.BaseAdapter;
import android.widget.TextView;

public class ListViewAdapter extends BaseAdapter {
    private Context context;
    private List<EmployeeBean> employeeList; 

    publicListViewAdapter(Context context, List<EmployeeBean> employeeList) {
            this.context = context;
            this.employeeList = employeeList;
        }

    public View getView(int position, View convertView, ViewGroup parent) {
            View row = convertView;
            EmployeeBeanHolder holder = null;
            LayoutInflater inflater = ((Activity) context).getLayoutInflater();
            row = inflater.inflate(R.layout.row, parent, false);

            holder = new EmployeeBeanHolder();
            holder.employeeBean = employeeList.get(position);
            holder.tvEmpId = (TextView) row.findViewById(R.id.tvEmpId);
            holder.tvName = (TextView) row.findViewById(R.id.tvNameEmp);
            holder.tvStatus = (TextView) row.findViewById(R.id.tvStatusEmp);

            row.setTag(holder);
            holder.tvEmpId.setText(holder.employeeBean.getEmpId());
            holder.tvName.setText(holder.employeeBean.getName());
            holder.tvStatus.setText(holder.employeeBean.getStatus());

             if (position % 2 == 0) {
                    row.setBackgroundColor(Color.rgb(213, 229, 241));
                } else {                    
                    row.setBackgroundColor(Color.rgb(255, 255, 255));
                }        

            return row;
        }

   public static class EmployeeBeanHolder {
        EmployeeBean employeeBean;
        TextView tvEmpId;
        TextView tvName;
        TextView tvStatus;
    }

    @Override
    public int getCount() {
            return employeeList.size();
        }

    @Override
    public Object getItem(int position) {
            return null;
        }

    @Override
    public long getItemId(int position) {
            return 0;
    }
}

员工 bean 类:

public class EmployeeBean {
    private String empId;
    private String name;
    private String status;

    public EmployeeBean(){      
    }

    public EmployeeBean(String empId, String name, String status) {
        this.empId= empId;
        this.name = name;
        this.status = status;
    }

    public String getEmpId() {
        return empId;
    }

    public void setEmpId(String empId) {
        this.empId= empId;
    }

    public String getName() {
        return name;
    }

    public void setName(String name) {
        this.name = name;
    }

    public String getStatus() {
        return status;
    }

    public void setStatus(String status) {
        this.status =status;
    }
}

在活动类中:

创建方法:

public static List<EmployeeBean> EMPLOYEE_LIST = new ArrayList<EmployeeBean>();

//create emplyee data
for(int i=0;i<=10;i++) {
  EmployeeBean emplyee = new EmployeeBean("EmpId"+i,"Name "+i, "Active");
  EMPLOYEE_LIST .add(emplyee );
}

ListView listView;
listView = (ListView) findViewById(R.id.listView);
listView.setAdapter(new ListViewAdapter(this, EMPLOYEE_LIST));
于 2014-12-22T07:37:15.317 回答
3

Listview 因此具有内置滚动功能。所以你不能在滚动视图中使用列表视图。将其封装在任何其他布局中,例如 LinearLayout 或 RelativeLayout。

于 2012-12-03T08:42:41.257 回答
2

放入ListViewaScrollView永远不会受到启发。但是,如果您想要发布的类似 XML 的行为,我有 3 个选项:

  1. 删除ScrollView:删除你的ScrollView,你可以给ListViews 一些相对于总布局的特定大小(特定dplayout_weight)。

  2. ListViews替换为LinearLayouts:您可以通过迭代项目列表来添加列表项目,并LinearLayout通过膨胀视图和设置相应的数据(字符串、图像等)将每个项目视图添加到相应的项目中。

  3. 如果您确实需要将ListViews 放入 中ScrollView,则必须使ListViews 不可滚动(这实际上与上面的解决方案 2 相同,但带有ListView代码),否则布局将无法按预期运行。
    要制作ListView不可滚动,您可以阅读此 SO post,其中对我的精确解决方案如下所示:

listView.setOnTouchListener(new OnTouchListener() {
  public boolean onTouch(View v, MotionEvent event) {
    return (event.getAction() == MotionEvent.ACTION_MOVE);
  }
});

于 2015-01-22T11:30:10.127 回答
0

我找到了一个棘手的解决方案......它只适用于RelativeLayout。我们只需要在 ListView 上方放置一个 View 并在 View 上设置可点击的“true”,在 ListView 上设置为 false

 <ListView
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:id="@+id/listview
    android:clickable="false" />

<View
    android:layout_width="match_parent"
    android:background="@drawable/gradient_white"
    android:layout_height="match_parent"
    android:clickable="true"
    android:layout_centerHorizontal="true"
    android:layout_alignTop="@+id/listview" />
于 2016-07-01T19:58:21.657 回答
0

我遇到了这个问题,我找到了解决方案。在我的情况下,listView 比屏幕大,所以列表不够大,需要滚动,但我看不到它,因为一半列表超出了屏幕。

我解决了它,添加了足够的 marginBotton 以使 listView 更短并且适合屏幕。

<ListView
        android:id="@+id/lvDatos"
        android:layout_width="match_parent"
        android:layout_height="match_parent"
        android:layout_marginBottom="300dp"/>
于 2021-06-24T12:59:36.217 回答