gpt4 book ai didi

java - 在 Android 运行时更新 View

转载 作者:塔克拉玛干 更新时间:2023-11-03 00:42:49 25 4
gpt4 key购买 nike

这个例子非常简单:我想通过显示文本 (canvas.drawText()) 让用户知道应用程序在做什么。然后,出现了我的第一条消息,但没有出现其他消息。我的意思是,我有一个“setText”方法,但它不会更新。

onCreate(Bundle bundle) {
super.onCreate(bundle);
setContentView(splash); // splash is the view class
loadResources();
splash.setText("this");
boundWebService();
splash.setText("that"):
etc();
splash.setText("so on");
}

View 的文本绘制通过在 onDraw() 中执行一个 drawText 来工作;因此 setText 更改文本但不显示它。

有人建议我用 SurfaceView 替换 View ,但只更新几次会很麻烦,所以......我怎么能在运行时动态更新 View 呢?

它应该很简单,只显示文本 2 秒,然后主线程执行他的操作,然后更新文本...

谢谢!

更新:

我尝试实现 handler.onPost(),但又是同样的故事。让我把代码给你:

public class ThreadViewTestActivity extends Activity {

Thread t;
Splash splash;

/** Called when the activity is first created. */
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.main);

splash = new Splash(this);
t = new Thread(splash);
t.start();

splash.setTextow("OA");
try { Thread.sleep(4000); } catch (InterruptedException e) { }
splash.setTextow("LALA");
}
}

和:

public class Splash implements Runnable {

Activity activity;
final Handler myHandler = new Handler();

public Splash(Activity activity) {
this.activity=activity;
}

@Override
public void run() {
// TODO Auto-generated method stub

}

public synchronized void setTextow(final String textow) {
// Wrap DownloadTask into another Runnable to track the statistics
myHandler.post(new Runnable() {
@Override
public void run() {
TextView t = (TextView)activity.findViewById(R.id.testo);
t.setText(textow);
t.invalidate();
}
});
}
}

虽然 splash 在其他线程中,但我在主线程上 hibernate ,我使用处理程序来管理 UI 和所有内容,它不会改变任何东西,它只显示最后更新。

最佳答案

我还没有碰到这个,但我认为通常的模式是在后台线程中进行冗长的初始化,并使用 Handler.post() 来更新 UI。参见 http://developer.android.com/reference/android/widget/ProgressBar.html另一个不同但可能相关的示例。

另见 this answer ,尤其是第一段:

The problem is most likely that you are running the splash screen (some sort of Dialog such as ProgressDialog I assume) in the same thread as all the work being done. This will keep the view of the splash screen from being updated, which can keep it from even getting displayed to the screen. You need to display the splash screen, kick off an instance of AsyncTask to go download all your data, then hide the splash screen once the task is complete.

更新(基于您的更新和您的评论):除了创建 Activity 的线程外,您不应该在任何线程中更新 UI。为什么您无法在后台线程中加载您的资源?

关于java - 在 Android 运行时更新 View ,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4503458/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com