1

我正在尝试创建一个基于 smack 库的聊天应用程序。我认为我的问题与这个库无关,因为 logcat 可以正确发送和接收所有内容。我的问题是当我收到一条消息时它不显示。以下是我用来显示文本的方法。

public void TextCreating(String message) {

    Log.d("START", "Method Excution started.");

    layout = (LinearLayout) findViewById(R.id.layoutLinear);
    LayoutParams lparams = new LayoutParams(LayoutParams.WRAP_CONTENT,
            LayoutParams.WRAP_CONTENT);
    tv = new TextView(this);
    tv.setLayoutParams(lparams);
    tv.setText(message);
    tv.setTextColor(Color.WHITE);
    Log.d("STARTED", "Text color OK.");
    layout.addView(tv);
    Log.d("STARTED", "Text didsplayed.");
}

这种代码和平将作为收到的消息执行。这些接收到的消息通过一个名为 PacketListener 的侦听器进行处理。这个接收部分工作正常。在这个监听器中,当我调用上面的 TextCreating 方法时,它会执行到 tv.setTextColor(Color.WHITE); 最后一行不执行。这是什么原因?我怎么解决这个问题 ?提前致谢 :)

编辑 :

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:orientation="vertical" >

<TextView
    android:layout_width="wrap_content"
    android:layout_height="wrap_content"
    android:text="Chat Room"
    android:textAppearance="?android:attr/textAppearanceLarge" />

<TextView
    android:layout_width="wrap_content"
    android:layout_height="wrap_content"
    android:layout_marginTop="10dp"
    android:text="Chat History :" />

<LinearLayout
    android:id="@+id/layoutLinear"
    android:layout_width="fill_parent"
    android:layout_height="250dp"
    android:orientation="vertical"
    android:background="#000000"
    android:layout_marginLeft="2dp"
    android:layout_marginRight="2dp" >

</LinearLayout>

<EditText
    android:id="@+id/editTextMessage"
    android:layout_width="match_parent"
    android:layout_height="wrap_content"
    android:layout_marginTop="5dp"
    android:ems="10" >

    <requestFocus />
</EditText>

<Button
    android:id="@+id/buttonSend"
    android:layout_width="fill_parent"
    android:layout_height="wrap_content"
    android:text="Send" />

</LinearLayout>
4

4 回答 4

0

这是创建聊天框的替代解决方案。它的用途ListView。新品message到货时添加。

android:stackFromBottom

可以设置为true,使它完全像一个聊天框。默认情况下它也有滚动。

希望能帮助到你。

于 2012-09-27T04:28:55.043 回答
0

Android SDK 有一个通过蓝牙通信的示例聊天应用程序。你可以看一下代码。

它使用 aListView来显示对话

希望这个答案有用:)

于 2012-09-27T05:07:25.803 回答
0

我已经在设备上运行了 Yours 代码,并没有发现任何问题。我已经进行了计时器调用,TextCreating(String.valueOf(System.currentTimeMillis()) + " next call\n");并且能够观察黑色 LinearLayout 中的文本。
我看到的唯一问题是LinearLayout不会滚动。因此,如果您添加更多文本,它将不可见。

于 2012-09-27T07:27:36.793 回答
0

首先感谢大家的想法和帮助。我通过在代码中引入 Handler 来解决这个问题。我试图在我的 UI 线程中做所有事情。所以我修改了我的代码如下。

private Handler mHandler = new Handler();
public void TextCreating(final String message) {

    mHandler.post(new Runnable() {
        @Override
        public void run() {             
            layout = (LinearLayout) findViewById(R.id.layoutLinear);
            LayoutParams lparams = new LayoutParams(LayoutParams.WRAP_CONTENT,
                    LayoutParams.WRAP_CONTENT);
            tv = new TextView(MUCchat.this);
            tv.setLayoutParams(lparams);
            tv.append(message);
            tv.setTextColor(Color.WHITE);
            layout.addView(tv);
        }
    });     
}

这个链接帮助我解决了这个问题。 从线程更新 textView

于 2012-09-27T08:49:25.310 回答