列表视图的高度

时间:2015-06-19 10:12:47

标签: android listview android-listview

我一直在尝试为我的应用制作布局,我在其中设置了android:layout_height="wrap_content"

这是我的代码::

<ScrollView xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:card_view="http://schemas.android.com/apk/res-auto"
    xmlns:tools="http://schemas.android.com/tools"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    tools:context="com.example.hp.money.DashBoard">

    <LinearLayout
        android:layout_width="match_parent"
        android:layout_height="match_parent"
        android:orientation="vertical">

        <android.support.v7.widget.CardView
            android:id="@+id/cv_amount_display"
            android:layout_width="match_parent"
            android:layout_height="200dp">
           .....
        </android.support.v7.widget.CardView>

        <android.support.v7.widget.CardView
            android:layout_width="match_parent"
            android:layout_height="wrap_content"
            android:layout_gravity="center"
            card_view:cardCornerRadius="10dp">

            <LinearLayout
                android:layout_width="match_parent"
                android:layout_height="match_parent"
                android:orientation="vertical">

                <TextView
                    android:layout_width="match_parent"
                    android:layout_height="wrap_content"
                    android:text="@string/last_10_transaction" />

                <ListView
                    android:id="@+id/last_transactions_lv"
                    android:layout_width="match_parent"
                    android:layout_height="wrap_content"
                    android:orientation="vertical" />
            </LinearLayout>
        </android.support.v7.widget.CardView>
    </LinearLayout>
</ScrollView>

我在ScrollView中使用ListView,这是个坏主意,我知道!我相信它会导致一些滚动问题。但是我必须在运行时动态更新屏幕上的数据,我认为只有listview可以处理它。如果还有其他任何View,请建议。

现在,问题是即使ListView的数据源有10个项目,ListView的高度始终保持等于一个listView元素的大小,但listview的高度设置为{{1} ,所以可能应该相应调整大小。但它并没有!如何解决这个问题?

这就是它的外观,即使Listview有10个项目! ListView是标题为LAST 10 TRANSACTIONS

的ListView

The ListView is the one which has a heading as LAST 10 TRANSACTIONS

为什么我使用ScrollView?

我放了一个scrollview,因为listview中的enteries数量可能很多,所以我希望当用户滚动查看listview中当前不可见的条目时,整个页面会滚动,而不仅仅是列表视图。

3 个答案:

答案 0 :(得分:1)

“在运行时将数据动态插入Listview”是什么意思?如果要动态修改列表数据,则ListView可以在内部处理它。在这种情况下你不需要做任何事情。因此,您可以删除ScrollView,以便它可以正常工作。

答案 1 :(得分:1)

您无法在ScrollView中添加ListView。 为了满足您的需求,您可以动态设置ListView高度以满足您的需求...... 设置列表适配器后,只需调用此方法...

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);
    }

答案 2 :(得分:1)

正如其他人指出的那样,你不能把一个ListView放在ScrollView里面(反正它没有意义,ListView有自己的滚动)

  

但我必须在运行时动态地将数据插入Listview,如果有其他方法可以做,请建议。

我不明白为什么你认为你不能,并想知道为什么你认为ScrollView会这样做。

如果你已经创建了自己的适配器来填充ListView,你应该有这样的东西:

class listViewAdapter extends BaseAdapter
{
     public View getView(int position, View convertView, ViewGroup parent) 
     {
     }
     public int getCount()
     {
     }
     public Object getItem(int position) {
     }
     public long getItemId(int position){
     }
}

然后你应该创建一个数据字段和一个setter

private Arraylist<DataType> data;

public void setData(Arraylist<DataType> data)
{
    data = data;
}

然后你可以像这样使用它:

ListView lv = findViewById...
ListViewAdapter adapter = new ListViewAdapter();
adapter.setData(data);
lv.setAdapter(new ListViewAdapter());

添加或删除数据后,您可以通过调用

重新加载数据
adapter.notifySetDataChanged();