在UI线程中未更新TextView的文本

时间:2014-03-07 19:10:19

标签: java android textview

我遇到了问题。我想在选择项目(铃声)后更改textview的文本。我得到了选定的铃声标题,并希望将其写在textview的text属性上,但它不起作用(我在UI线程中不在单独的线程中)。

这是代码,我想更新文本:

@Override
protected void onActivityResult(int requestCode, int resultCode, Intent data) {
    super.onActivityResult(requestCode, resultCode, data);
    switch(resultCode) {
        case RESULT_OK: 
        String ringtoneTitle = null;
        ringtoneUri = data.getParcelableExtra(RingtoneManager.EXTRA_RINGTONE_PICKED_URI);
        if(ringtoneUri != null) {
            ringtoneValue = ringtoneUri.toString(); //diesen Wert später in Datenbank abspeichern !!
            ringtoneTitle = RingtoneManager.getRingtone(this, ringtoneUri).getTitle(this); //Titel getten
        }
        textViewRingtone.append(": " + ringtoneTitle); //Titel zu TextView setzen
        break;
    }
}

有人可以帮忙吗?

3 个答案:

答案 0 :(得分:0)

使用post(Runnable)类的View方法:

textViewRingtone.post(new Runnable() {
    @Override
    public void run() {
        textViewRingtone.append(": " + ringtoneTitle);
    }
};

答案 1 :(得分:0)

尝试在处理程序中设置textview:

@Override
protected void onActivityResult(int requestCode, int resultCode, Intent data) {
    super.onActivityResult(requestCode, resultCode, data);
    switch(resultCode) {
        case RESULT_OK: 
        String ringtoneTitle = null;
        ringtoneUri = data.getParcelableExtra(RingtoneManager.EXTRA_RINGTONE_PICKED_URI);
        if(ringtoneUri != null) {
            ringtoneValue = ringtoneUri.toString(); //diesen Wert später in Datenbank abspeichern !!
            ringtoneTitle = RingtoneManager.getRingtone(this, ringtoneUri).getTitle(this); //Titel getten
        }

        new Handler().post(new Runnable() {
            @Override
            public void run() {

                textViewRingtone.append(": " + ringtoneTitle); //Titel zu TextView setzen
            }
        });

        break;
    }
}

答案 2 :(得分:0)

行, 我找到了解决方案,这是我的一个非常非常愚蠢的错误,你无法知道,因为我没有向你展示这些代码。 在onClick方法中,我开始显示铃声选择器的意图我意外地调用了startActivity(intent)而不是startActivityForResult(intent,requestCode),因此无法调用onActivityResult。 感谢@codeMagic,他让我意识到了这个错误。