android-ListView内容在适配器更新后被截断

我的UI中有许多垂直堆叠的面板.每个面板都包含一个ListView.基于用户交互,ListView中的项目数将更新.

我的问题是,如果我增加在ListView中显示的项目数,则包含面板将不会扩展以显示它们.相反,我的ListView只是被淡化为黑色而被切断.我正在以编程方式创建这些堆叠的面板中的每一个-这是创建功能的主体:

LinearLayout containingPanel = new LinearLayout(TestActivity.this);
containingPanel.setOrientation(LinearLayout.VERTICAL);

// create title
TextView titleText = new TextView(TestActivity.this);
titleText.setText("a title");
titleText.setGravity(Gravity.CENTER);
titleText.setLayoutParams(new LayoutParams(LayoutParams.FILL_PARENT, LayoutParams.WRAP_CONTENT));


// create dynamic list view of costs                
ListView dynamicContentListView = new ListView(TestActivity.this);
dynamicContentListView.setAdapter(new MyDynamicAdapter());
LinearLayout.LayoutParams params = new LinearLayout.LayoutParams(LayoutParams.FILL_PARENT, LayoutParams.WRAP_CONTENT);
params.weight = 1;
dynamicContentListView.setLayoutParams(params);

// build up GUI

containingPanel.addView(titleText); 

containingPanel.addView(dynamicContentListView);                        
return containingPanel;

我认为在ListView上设置权重应该足够,但事实并非如此.所有GUI更新都可以正常工作-新项目会自动添加到支持适配器的数据中,并且ListView会正确更新自身.但是,当我添加三个或四个新项目后,containingPanel拒绝更新自身,并且新项目被融合了.

最佳答案
(您可以在ScrollView内添加一个ListView,但要花些功夫(因为它们都是Scrollable组件-操作系统如何知道您要滚动的组件?).您需要在isScrollContainer =“ false”上添加您的ListView.)

<ListView
    android:id="@+id/list"
    android:layout_width="match_parent"
    android:layout_height="wrap_contents"
    android:isScrollContainer="false"/>

ListView的全部要点是它的高度取决于页面的布局.仅当其子项的组合高度超过显示它所需的面积时,它才可滚动.

听起来您真正想要的是类似于由Adapter支持的LinearLayout的东西,网络上有几种实现方式,或者您可以创建自己的实现.

但是,您可以通过将ListView的Height设置为:listCount * itemHeight,以编程方式动态调整ListView的大小,从而改变ListView的行为.这将具有持续扩展ListView的效果.

您可能会发现,在开发UI设计时,您将不再需要这样的组件.

转载注明原文:android-ListView内容在适配器更新后被截断 - 代码日志