安卓TextView的setText方法无法正常工作

20

我知道有很多类似的帖子,但我已经阅读过它们,仍然无法解决问题。我的程序到达了Handler,但它总是返回catch异常“消息未处理”。

我声明了TextView private TextView chatbox;

在onCreate下面我有:

public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.main);
        setUpViews();
        setUpListener();
    }

setUpViews()代码段如下:

 private void setUpViews() {
    chatbox = (TextView) findViewById(R.id.chatbox);
    }

处理程序:

public Handler mHandler = new Handler(Looper.getMainLooper()){
        @Override
        public void handleMessage(Message msg){
            try{
                chatbox.setText("Got it!");
            }catch(Exception e){
                Log.i("MYLOG", "Message was not handled.");
            }

        }
    };

在main.xml文件中的片段:

<TextView
        android:id="@+id/chatbox"
        android:layout_width="200dp"
        android:layout_height="200dp"
        android:layout_centerHorizontal="true"
        android:layout_centerVertical="true"
        android:textAppearance="?android:attr/textAppearanceLarge" />

你遇到了什么异常? - Nick
7个回答

55

供将来参考,我有多个片段,每个片段对应我的ViewPager中的一个选项卡。一些TextView在两个片段中拥有相同的id,这就导致了冲突。我没有意识到这个问题,所以看起来一切正常,没有错误信息,但文本内容根本没有改变。因此,我建议为id使用独特的名称。


2
我也遇到了同样的问题。我在想,如果不同的页面具有相同的布局,为什么它们应该是唯一的呢?在我的情况下,设置不同的ID没有起作用,但是textView.requestLayout()解决了这个问题, 同时以下方法也适用于我: textView.setVisibility(View.INVISIBLE); textView.setVisibility(View.VISIBLE); - Oleksandr Albul
我曾经遇到过类似的问题,我的Activity中有一个TextView,它的id与RecyclerView(同一Activity)中的一个TextView相同。当第一个TextView调用findViewById()时,它会将引用与RecyclerView中的TextView混淆。 - Emil Pana

4
我希望您的处理程序在UI线程中运行。同时,请尝试执行以下操作:将字符串分配给变量,并在需要CharSequence时使用该变量。
String temp = "Got it!";
chatbox.setText(temp);

2
在我的情况下,我发现我的Textview与一个TextWatcher和一个Filter相关联,它们都包含一个逻辑,防止更新我的Textview值。
因此,除了其他解决方案外,您可以检查您的Textview是否链接到任何TextWatcherFilter,然后进行跟踪。

2

您没有给我们提供太多信息。

您应该查看异常堆栈跟踪,而不是将消息打印到控制台:e.printStackTrace();

但从这里来看,如果我必须猜测,那么看起来您要么在主线程之外设置了TextView的文本,要么 - 基于您发布的内容似乎不太可能 - 您的TextView未被设置且存在空指针异常。


1
当文本颜色与视图的背景颜色相同时,文本也会变得不可见,因此您可以定义一个文本颜色来解决这个问题。

0

就像这样是可以的!

private void setUpViews() {
    chatbox = (TextView) findViewById(R.id.chatbox);
    chatbox.setText("Got it!");
}

-1

你发送了一条消息吗? 例如:

            Message message=new Message();
        message.what=1;
        mHandler.sendMessage(message);

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接