我一直在尝试为我的应用制作布局,我在其中设置了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
为什么我使用ScrollView?
我放了一个scrollview,因为listview中的enteries数量可能很多,所以我希望当用户滚动查看listview中当前不可见的条目时,整个页面会滚动,而不仅仅是列表视图。
答案 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();