Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/multithreading/4.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Android RunUnuithRead()未更新TextView_Android_Multithreading_User Interface_Textview - Fatal编程技术网

Android RunUnuithRead()未更新TextView

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

所以我知道这个问题以前也提过,但我找不到我的代码出了什么问题。我有一个我想更新的文本视图和一个我想让它不可见的按钮,这样我就可以看到它正在工作。在onCreate中,我有:

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来设置它,并且它不会用更新e> .setText()也是。所以它仍然显示“Hello,World!”?是的,我在使用字符串资源、直接使用字符串和删除
android:text=“”
总之,似乎什么都不起作用。但我确实更新了活动xml和片段xml,这可能是一个问题吗?好的,很抱歉让人感到痛苦,但请您编辑您的问题,将其包括:整个活动类、活动xml文件和片段xml文件。我相信我们最终可以了解到底:)我想我已经明白了。我在我的
RelativeLayout
中有一个嵌套的
线性布局
,我刚刚将其更改为前者,尽管它当前复制了我的布局,但它仍然有效!