刷新android中的所有视图?

时间:2013-02-14 10:11:34

标签: android android-layout

我在消息平台上工作,如whatsup.When发送消息ı必须更新屏幕,因为我正在db中获取数据。当我按下发送按钮时,必须更新视图。 我用谷歌搜索,但不能确切的解决方案。任何人都可以帮助我吗?

编辑:

我的代码:

RelativeLayout layout=new RelativeLayout(this);
                LayoutParams lparams = new LayoutParams(
                        1200,LayoutParams.WRAP_CONTENT);
                layout.setLayoutParams(lparams);
                //layout.setBackgroundResource(R.drawable.bubble);
                // Creating a new TextView
                TextView tv = new TextView(this);
                tv.setText(msgdesc[i]);
                layout.setGravity(Gravity.RIGHT);
                tv.setPadding(30, 10, 0, 0); 
                layout.addView(tv);
                bubbleLayout.addView(layout);

6 个答案:

答案 0 :(得分:8)

您需要致电requestLayout()invalidate(),具体取决于您在视图中准确更新的内容

如果您只需要View重绘,请致电invalidate()

如果您更改View界限(例如尺寸),请致电requestLayout()

答案 1 :(得分:3)

如果您将listview与listadapter一起使用,那么您必须使用listadapter.notifyDataSetChanged();这将使用新数据更新您的列表视图

答案 2 :(得分:1)

您是否尝试使用view.invalidate()http://developer.android.com/reference/android/view/View.html

<强>图纸

  

通过遍历树并渲染每个视图来处理绘图   与无效区域相交。因为树是按顺序遍历的,   这意味着父母将在他们的之前(即后面)抽签   孩子们,兄弟姐妹按照他们出现在树上的顺序画出来。如果   您为View设置了一个可绘制的背景,然后View将绘制它   在回调它的onDraw()方法之前为你服务。

     

请注意,框架不会绘制不在的框架   无效区域。

     

要强制绘制视图,请致电invalidate()

你可以尝试像这篇文章中的回复一样使viewgroup无效: How to force an entire layout View refresh?

答案 3 :(得分:1)

最后,如果您的布局中只有TextView,请尝试:

//Supposing that msgdesc is a class field.

void myRefreshFunction(RelativeLayout l)
{
                if(l != null)
                {
                  l.removeAllViews();  
                  TextView tv = new TextView(this);
                  tv.setText(msgdesc[i]);
                  layout.setGravity(Gravity.RIGHT);
                  tv.setPadding(30, 10, 0, 0); 
                  layout.addView(tv);
                }
}

答案 4 :(得分:1)

请参阅Dianne's answer

invalidate()只会导致重绘视图:http://developer.android.com/reference/android/view/View.html#invalidate()

requestLayout()要求视图通过新的度量/布局传递(然后重绘):http://developer.android.com/reference/android/view/View.html#requestLayout()

答案 5 :(得分:0)

如果您正在构建消息传递应用程序,并且将项目添加到某种列表中,建议您使用RecyclerView和Recyclerview适配器来实现您要执行的操作。当列表大小增加时,您的相对布局将不会滚动,但是RecyclerView会滚动。最重要的是,RecyclerView的清单很长,可以为您带来更高的性能,因为名称~Recycle~rView可以回收以前的物品,从而提高性能。

这是有关如何实现所需目标的合理教程: https://blog.sendbird.com/android-chat-tutorial-building-a-messaging-ui

(我不隶属于SendBird或其他任何公司,这只是您在Google上搜索到的第一个结果:RecyclerView聊天示例)