2014-05-15 143 views
0

所以我知道这个问题出现之前,但我找不到我的代码出了什么问题。我有一个我想更新的TextView,以及一个我想隐藏的Button,这样我就可以看到它正在工作。在我的onCreate我:Android runOnUiThread()没有更新TextView

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在我的Strings.xml中设置为“Hello World!”字符串并在活动开始后读取该消息,但该按钮仍然可见,并且出现烤面包的消息不会出现。我究竟做错了什么?输入是一个字符串。

我的变量:

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")); 
+2

首先,我强烈建议使用常量“View.INVISIBLE”而不是“int”。其次,如果你从'onCreate()'调用它,你不需要runOnUiThread(),因为它已经在主线程上运行了。 – codeMagic

+0

显示你实际进行调用的代码'setMessage(“Welcome,....'。看起来你甚至都没有调用它,因为Toast没有出现。 – Randy

+1

如果你看到'Toast'这意味着你已经在UI线程上并且不需要'runOnUiThread' – tyczj

回答

0

这并没有真正看起来像你需要创建一个新的线程来说实话。相反的:

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(); 
} 
+0

我很困惑。我有这个代码,只是我把'input'放在setText里面,因为它是相同的String,并且它不会改变任何东西。我添加了另一个textview来设置它,它不会用'.setText()'更新。 – dburnsii

+0

所以它仍然显示“你好,世界!” ? – user184994

+0

是的,我已经使用字符串资源,直接使用字符串,并删除'android:text =“”''完全没有任何工作。我确实更新了活动xml和片段xml,这可能是一个问题吗? – dburnsii