这里我是android开发的新手。如果有什么事情不清楚,请不要介意。
我对此问题进行了足够的研究,然后将其标记为重复,请更新解决方案。
我在这里添加了一个布局布局的图像,我想在这里实现。
此处listView
仅显示为1个项目。如果我滚动,则所有项目都将以此高度显示滚动。
此处我的xml
结构
<LinearLayout>(parent)
<ScrollView>
<LinearLayout>
<LinearLayout>
weight: __
-----------
</LinearLayout>
<ListView>
h:match_parent
w:wrap_content
weight:__
</ListView>
<LinearLayout>
weight:__
--------------
</LinearLayout>
</LinearLayout>
</ScrollView>
</LinearLayout>
我从数据库获取大量数据集,并且必须在LinearLayouts
的中间显示这些数据集。现在我使用ListView
但似乎无法在这里使用我的期望。
请建议我是否可以在此ListView
执行此操作,或者如何为每个数据集使用LinearLayout
个数字块?
更新 这就是我所期望的,如图所示。
答案 0 :(得分:1)
试试这个
<LinearLayout>(parent)
<NestedScrollView>
<LinearLayout>
<LinearLayout>
w:wrap_content
h:wrap_content
</LinearLayout>
<ListView>
w:match_p__arent
h:match_p__arent
weight:1
NestedScroll:true
</ListView>
<LinearLayout>
w:match_p__arent
h:match_p__arent
weight:1
</LinearLayout>
</LinearLayout>
</NestedScrollView>
</LinearLayout>
答案 1 :(得分:1)
您的ListView需要此方法
public static void setListViewHeightBasedOnItems(ListView target_Listview, int limit) // LIMIT 0 FOR SHOWING ALLL CONTENTS
{
if (limit == 0) {
ListAdapter listAdapter = target_Listview.getAdapter();
if (listAdapter != null) {
int numberOfItems = listAdapter.getCount();
// Get total height of all items.
int totalItemsHeight = 0;
for (int itemPos = 0; itemPos < numberOfItems; itemPos++) {
// if(itemPos < 4)
// {
View item = listAdapter.getView(itemPos, null, target_Listview);
item.measure(View.MeasureSpec.UNSPECIFIED, View.MeasureSpec.UNSPECIFIED);
Log.e("" + itemPos, "" + item.getMeasuredHeight());
totalItemsHeight += item.getMeasuredHeight();
// }
}
// Get total height of all item dividers.
int totalDividersHeight = target_Listview.getDividerHeight() * (numberOfItems - 1);
// Set list height.
ViewGroup.LayoutParams params = target_Listview.getLayoutParams();
params.height = totalItemsHeight + totalDividersHeight;
target_Listview.setLayoutParams(params);
target_Listview.requestLayout();
// return true;
}
else {
}
}
else {
ListAdapter listAdapter = target_Listview.getAdapter();
if (listAdapter != null) {
int numberOfItems = listAdapter.getCount();
// Get total height of all items.
int totalItemsHeight = 0;
for (int itemPos = 0; itemPos < numberOfItems; itemPos++) {
if (itemPos < limit) {
View item = listAdapter.getView(itemPos, null, target_Listview);
item.measure(View.MeasureSpec.UNSPECIFIED, View.MeasureSpec.UNSPECIFIED);
Log.e("" + itemPos, "" + item.getMeasuredHeight());
totalItemsHeight += item.getMeasuredHeight();
}
}
// Get total height of all item dividers.
int totalDividersHeight = target_Listview.getDividerHeight() * (numberOfItems - 1);
// Set list height.
ViewGroup.LayoutParams params = target_Listview.getLayoutParams();
params.height = totalItemsHeight + totalDividersHeight;
target_Listview.setLayoutParams(params);
target_Listview.requestLayout();
}
}
}
在ListView
上设置适配器后,只需调用方法并将参数中的ListView
作为第二个参数传递给参数。
One Suggestion from my side
:您应该使用RecyclerView
而不是listview
。在设置好所有内容后,只需要为此写一行(适配器等)
recyclerView.HasFixedSize();
希望我的回答会有所帮助。
答案 2 :(得分:0)
可能需要进一步澄清你正在努力实现的目标。
如果ListView
应该更长并且滚动列表中的更多项目,我可能会建议您使用RecyclerView
。它的设置稍微多一点,但允许根据概念创建更复杂的布局。
如果您想进一步搜索,有许多很好的参考资料可以学习RecyclerView
的方式:
RecyclerView
的Android开发者网站教程
答案 3 :(得分:0)
试试这种方式
<LinearLayout>
<LinearLayout>
<LinearLayout>
weight: __
-----------
</LinearLayout>
<ScrollView
android:layout_width="match_parent"
android:layout_height="match_parent"
android:orientation="vertical">
<ListView>
h:match_parent
w:wrap_content
weight:__
</ListView>
</ScrollView>
<LinearLayout>
weight:__
--------------
</LinearLayout>
</LinearLayout>
答案 4 :(得分:0)
我已经尝试过在我的Android工作室工作,我的工作能够滚动视图。然后你就有点狡猾了。
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:orientation="vertical" android:layout_width="match_parent"
android:layout_height="match_parent">
<ScrollView
android:layout_width="match_parent"
android:layout_height="match_parent">
<RelativeLayout
android:layout_width="match_parent"
android:layout_height="match_parent"
android:background="@color/colorAccent">
<LinearLayout
android:id="@+id/first"
android:layout_width="match_parent"
android:layout_height="50dp"
android:background="@color/colorAccent"
android:orientation="vertical">
<TextView
android:layout_width="match_parent"
android:layout_height="match_parent"
android:layout_gravity="center_horizontal"
android:text="@string/hello" />
</LinearLayout>
<ListView
android:id="@+id/listview"
android:layout_width="match_parent"
android:layout_height="250dp"
android:background="@color/black_overlay"
android:layout_below="@+id/first" />
<LinearLayout
android:id="@+id/second"
android:layout_width="match_parent"
android:layout_height="550dp"
android:background="@color/colorAccent"
android:layout_below="@+id/listview"
android:orientation="vertical">
<TextView
android:layout_width="match_parent"
android:layout_height="match_parent"
android:layout_gravity="center_horizontal"
android:text="@string/hello" />
</LinearLayout>
</RelativeLayout>
</ScrollView>