基于ViewGroup的滑动界面动态添加的数据为什么不显示?

Matrix_xx 2011-08-18 05:58:38
主要问题就像标题说的,基于ViewGroup的滑动界面动态添加的数据为什么不显示?
我现在有一个从ViewGroup继承下来的滑动界面ScorllLayout,可左右滑动,在程序初始化时添加了三个子View

LayoutInflater factory = LayoutInflater.from(this);
for (int i = 0; i < 3; i++)
{
m_childView[i] = factory.inflate(R.layout.childview, null);
m_ScrollLayout.addView(m_childView[i]);
}


这个childview是这样的,注意,里边用了ViewStub

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" android:layout_width="wrap_content" android:layout_height="wrap_content" android:orientation="vertical">
<ViewStub android:id="@+id/childview_viewstub" android:inflatedId="@+id/panel_viewstub" android:layout="@layout/childview_item"
android:layout_width="wrap_content" android:layout_height="wrap_content"/>
</LinearLayout>


childview_item.xml是很简单的,如下:

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" android:layout_width="wrap_content" android:layout_height="wrap_content" android:orientation="vertical">
<TextView android:id="@+id/textView1" android:text="TextView" android:layout_height="wrap_content" android:layout_width="wrap_content"
android:background="#ffffff"></TextView>
<EditText android:layout_width="wrap_content" android:text="EditText" android:layout_height="wrap_content" android:id="@+id/editText1"
android:background="#ff0000"></EditText>

</LinearLayout>


程序可以在三屏之间来回滑动,考虑到效率和内存,布局里边我用上ViewStub,当然,贴上来的只是一个精简后的DEMO,我想在滑动到哪屏时将哪屏的ViewStub通过inflate()显示出来,但是现在不知道怎么回来显示不出来,除非我在滑动界面所在的Activity的onCreate函数中事先将每个屏的ViewStub inflate()出来,否则就是界面可滑动,但上边什么都没有,如果事先inflate出来,那么就达不到提高效率和减少内存的目的了,这个问题困扰我好几天了,麻烦大家一起看下

程序代码是没有逻辑问题的,如果不用ViewStub,那界面上是完全正常的,所以ScorllLayout类是没有问题的
...全文
512 11 打赏 收藏 转发到动态 举报
写回复
用AI写文章
11 条回复
切换为时间正序
请发表友善的回复…
发表回复
panxq0809 2012-09-03
  • 打赏
  • 举报
回复
需要在ViewGroup中的onMeasure方法里添加一个对子元素的遍历,在onLayout中也添加一个布局遍历就实现了。
@Override

protected void onMeasure(int widthMeasureSpec, int heightMeasureSpec) {
// TODO Auto-generated method stub
super.onMeasure(widthMeasureSpec, heightMeasureSpec);
int childCount = getChildCount();
for(int i = 0; i < childCount; i++){
View v = getChildAt(i);
v.measure(widthMeasureSpec, heightMeasureSpec);
}
}

@Override
protected void onLayout(boolean changed, int l, int t, int r, int b) {
int childCount = getChildCount();
for(int i = 0; i < childCount; i++){
View v = getChildAt(i);
v.layout(l, t, r, b);
}
}

参考:http://www.189works.com/article-53470-1.html


桥下一粒砂 2012-02-02
  • 打赏
  • 举报
回复
遇到同样的问题:

我测试过,在UI线程中添加的View对象可以显示,但在非UI线程中添加的View就不显示了,纠结中……
荣氏天下 2012-01-09
  • 打赏
  • 举报
回复
问题解决了吧?分享下
大繁星星 2011-12-06
  • 打赏
  • 举报
回复
可以参考下http://www.cnblogs.com/lovewf/,这个博客一有解释
wllam0 2011-10-17
  • 打赏
  • 举报
回复
在程序的运行期间,某个布局在Inflate后,就不会有变化,除非重新启动。

  因为ViewStub只能Inflate一次,之后会被置空,所以无法指望后面接着使用ViewStub来控制布局。所以当需要在运行时不止一次的显示和隐藏某个布局,那么ViewStub是做不到的。这时就只能使用View的可见性来控制了。


可以参考下这里http://webservices.ctocio.com.cn/453/12150453.shtml
haizi2353101 2011-08-20
  • 打赏
  • 举报
回复
动态添加数据的时候,你只是add到groupView里面去了,并不会创建一个新的对象。所以根本就得不到这个对象。具体我也不知道为什么。
InLifer 2011-08-19
  • 打赏
  • 举报
回复
顶下吧
Matrix_xx 2011-08-19
  • 打赏
  • 举报
回复
没呢,还在研究
haizi2353101 2011-08-19
  • 打赏
  • 举报
回复
解决没有,LZ
haizi2353101 2011-08-19
  • 打赏
  • 举报
回复
楼主,你动态更新数据,解决了吗?我也有类似的问题。
Matrix_xx 2011-08-18
  • 打赏
  • 举报
回复
没有人知道么,还有顶一下吧

80,349

社区成员

发帖
与我相关
我的任务
社区描述
移动平台 Android
androidandroid-studioandroidx 技术论坛(原bbs)
社区管理员
  • Android
  • yechaoa
  • 失落夏天
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧