8

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

编辑:

我的代码:

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);
4

6 回答 6

9

您将需要调用requestLayout()invalidate()取决于您在视图中准确更新的内容

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

如果您更改View边界(例如大小)调用requestLayout()

于 2013-02-14T10:14:49.983 回答
3

如果您使用带有列表适配器的列表视图,那么您必须使用listadapter.notifyDataSetChanged();它来使用新数据更新您的列表视图

于 2013-02-14T10:20:39.547 回答
1

你试过view.invalidate()吗? http://developer.android.com/reference/android/view/View.html

绘画

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

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

要强制绘制视图,请调用invalidate().

您可以尝试像这篇文章中的回复使视图组无效: 如何强制整个布局视图刷新?

于 2013-02-14T10:16:14.550 回答
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);
                }
}
于 2013-02-14T13:18:46.390 回答
1

戴安娜的回答

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

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

于 2016-05-15T00:58:23.587 回答
0

如果您正在构建一个消息传递应用程序并将项目添加到某种列表中,我建议使用 RecyclerView 和 Recyclerview 适配器来实现您想要做的事情。当列表的大小增加时,您的相对布局将不会滚动,RecyclerView但是会。最重要的是,RecyclerView通过非常长的列表为您提供更多性能,因为从名称~Recycle~rView中,它回收了以前的项目,从而提高了性能。

这是一个关于如何实现你想要的合理的教程: https ://blog.sendbird.com/android-chat-tutorial-building-a-messaging-ui

(我不隶属于 SendBird 或任何东西,这只是你 google 时的第一个结果:RecyclerView 聊天示例)

于 2019-05-13T23:27:27.433 回答