Android RunUnuithRead()未更新TextView
所以我知道这个问题以前也提过,但我找不到我的代码出了什么问题。我有一个我想更新的文本视图和一个我想让它不可见的按钮,这样我就可以看到它正在工作。在onCreate中,我有:Android RunUnuithRead()未更新TextView,android,multithreading,user-interface,textview,Android,Multithreading,User Interface,Textview,所以我知道这个问题以前也提过,但我找不到我的代码出了什么问题。我有一个我想更新的文本视图和一个我想让它不可见的按钮,这样我就可以看到它正在工作。在onCreate中,我有: setMessage("Welcome, " + pref.getString("fName", "User")); 哪些调用了我创建的方法: private void setMessage(final String input) { this.input = input; runOnUiThread(ne
setMessage("Welcome, " + pref.getString("fName", "User"));
哪些调用了我创建的方法:
private void setMessage(final String input)
{
this.input = input;
runOnUiThread(new Runnable()
{
@Override
public void run() {
message.setText(input);
create.setVisibility(4);
}
});
Toast.makeText(this, input, Toast.LENGTH_LONG).show();
}
祝酒词只是为了让我能看到绳子正确地伸出来,它确实这样做了。我没有崩溃,日志中没有错误,什么都没有。Textview被设置为my Strings.xml中的一个字符串,表示“Hello World!”,活动开始后,它会读取该消息,但按钮仍然可见,toast出现的消息不会出现。我做错了什么?顺便说一下,输入是一个字符串
我的变量:
private TextView message;
private Button create;
private SharedPreferences pref;
private int norecurs = 0;
private Bundle state;
private Handler handler;
private String input;
onCreate()中以前没有的所有代码:
pref = getSharedPreferences("login", 0);
message = (TextView) findViewById(R.id.message);
create = (Button) findViewById(R.id.button1);
input = "Welcome, " + pref.getString("fName", "User");
setMessage("Welcome, " + pref.getString("fName", "User"));
老实说,你似乎并不需要创建一个新的线程。而不是:
pref = getSharedPreferences("login", 0);
message = (TextView) findViewById(R.id.message);
create = (Button) findViewById(R.id.button1);
input = "Welcome, " + pref.getString("fName", "User");
setMessage("Welcome, " + pref.getString("fName", "User"));
你应该写:
pref = getSharedPreferences("login", 0);
message = (TextView) findViewById(R.id.message);
create = (Button) findViewById(R.id.button1);
input = "Welcome, " + pref.getString("fName", "User");
// Just set the text in your onCreate
message.setText("Welcome, " + pref.getString("fName", "User"));
但是,如果您确实想保留setMessage
方法,只需将其更改为:
private void setMessage(String input)
{
this.input = input;
message.setText(input);
create.setVisibility(4);
Toast.makeText(this, input, Toast.LENGTH_LONG).show();
}
首先,我强烈建议使用常量,
View.INVISIBLE
而不是int
。其次,如果从onCreate()
调用它,则不需要runOnUiThread()
,因为它已经在主线程上运行。显示实际调用的代码setMessage(“欢迎,…。
。看起来你甚至没有打电话给它,因为Toast没有出现。如果你看到Toast
,这意味着你已经在UI线程上,不需要runOnUiThread
,但它不会以任何方式更新TextView,我只添加了runOnUiThread()因为我的印象是它会更新文本。toast即将出现,对于我希望TextView拥有的字符串,我非常困惑。我有这个代码,除了我将input
放在setText中,因为它是同一个字符串,并且不会改变任何内容。我添加了另一个TextView来设置它,并且它不会用android:text=“”
总之,似乎什么都不起作用。但我确实更新了活动xml和片段xml,这可能是一个问题吗?好的,很抱歉让人感到痛苦,但请您编辑您的问题,将其包括:整个活动类、活动xml文件和片段xml文件。我相信我们最终可以了解到底:)我想我已经明白了。我在我的RelativeLayout
中有一个嵌套的线性布局
,我刚刚将其更改为前者,尽管它当前复制了我的布局,但它仍然有效!