【问题标题】:ListView show only the first item in the listListView 仅显示列表中的第一项
【发布时间】:2015-10-31 17:45:29
【问题描述】:

我搜索了很多答案,但没有找到适合我的答案。 我发现当我将 layout_heigh 设置为 500dp -> 显示的所有项目,但是当它具有正常大小(layout_heigh=wrap_content)时,只显示第一个项目。

这是我的代码:

activity_main.xml:

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:orientation="vertical">

    <Button
        android:layout_width="match_parent"
        android:layout_height="50dp"
        android:text="Add Task"
        android:onClick="addTask" />

    <ListView android:id="@+id/myListView"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:drawSelectorOnTop="false"/>

</LinearLayout>

xml_item.xml:这是在listView中复制的一项

<?xml version="1.0" encoding="utf-8"?>
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:descendantFocusability="blocksDescendants">

    <TextView
        android:layout_width="100dp"
        android:layout_height="50dp"
        android:id="@+id/itemText"
        android:layout_alignParentLeft="true"
        android:layout_centerVertical="true"
        android:padding="15dp"
        android:textSize="20sp" />

    <Button
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:id="@+id/doneBtn"
        android:layout_alignParentRight="true"
        android:layout_centerVertical="true"
        android:layout_marginRight="5dp"
        android:text="Done" />


</RelativeLayout>

MyListAdapter: main_activity 中的一个类,它扩展了 ArrayAdapter 类,因此我可以将 TextView 和按钮放在一行中。

private class MyListAdapter extends ArrayAdapter<String> {

        private int layout;

        public MyListAdapter(Context context, int resource, List<String> objects) {
            super(context, resource, objects);
            layout= resource;
        }

        @Override
        public View getView(final int position, View convertView, ViewGroup parent) {
            ViewHolder mainHolder= null;
            if (convertView == null) {
                LayoutInflater inflater = LayoutInflater.from(getContext());
                convertView= inflater.inflate(layout, parent, false);
                ViewHolder viewHolder= new ViewHolder();
                viewHolder.item= (TextView) convertView.findViewById(R.id.itemText);
                viewHolder.btn= (Button) convertView.findViewById(R.id.doneBtn);
                viewHolder.btn.setOnClickListener(new View.OnClickListener() {
                    @Override
                    public void onClick(View v) {
                        Toast.makeText(getContext(), itemArray.get(position), Toast.LENGTH_SHORT).show();
                    }
                });
                convertView.setTag(viewHolder);
            }
            else {
                mainHolder= (ViewHolder) convertView.getTag();
                mainHolder.item.setText(getItem(position));
            }

            return convertView;
        }

        public class ViewHolder {
            TextView item;
            Button btn;
        }
    }

谢谢大家! :)

【问题讨论】:

    标签: android android-layout listview android-arrayadapter


    【解决方案1】:

    但当它具有正常大小时 (layout_heigh=wrap_content)

    使用ListView 给它一个height=wrap_content 是一个非常糟糕的主意。
    这迫使 ListView 在布局时从适配器中测量几个子节点,以了解它应该有多大。
    您可以自行调试适配器内部的getView() 方法。

    在您的情况下,使用 LinearLayout 只需向您的 listView 添加上边距(50dp 作为按钮)并使用 layout_heigh=match_parent
    否则使用RelativeLayout

    【讨论】:

    • 我按照你的建议做了,但并没有解决我的问题:(
    【解决方案2】:

    考虑到任何同级视图的高度(在本例中是您的按钮),更改您的列表视图以占用尽可能多的空间。以下是使用 android:layout_weight 属性的方法

    <?xml version="1.0" encoding="utf-8"?>
    <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
                  android:layout_width="match_parent"
                  android:layout_height="match_parent"
                  android:orientation="vertical">
    
        <Button
            android:layout_width="match_parent"
            android:layout_height="50dp"
            android:text="Add Task"
            android:onClick="addTask" />
    
        <ListView android:id="@+id/myListView"
                  android:layout_width="wrap_content"
                  android:layout_height="0dp"
                  android:layout_weight="1"
                  android:drawSelectorOnTop="false"/>
    
    </LinearLayout>
    

    【讨论】:

      猜你喜欢
      • 2021-02-13
      • 1970-01-01
      • 1970-01-01
      • 2020-02-28
      • 2019-12-22
      • 2020-08-11
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多