在Android中显示动态Textview

时间:2012-09-27 02:55:11

标签: android android-layout

我试图创建一个基于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 个答案:

答案 0 :(得分:0)

以下是创建聊天框的替代解决方案。 其用途ListView。在新message到达时添加项目。

android:stackFromBottom

可以设置为true,使其与聊天框完全相同。默认情况下它也有滚动。

希望它有所帮助。

答案 1 :(得分:0)

Android SDK有一个示例聊天应用程序,通过蓝牙进行通信。 您可以查看代码。

它使用ListView来显示对话

希望这个答案很有用:)

答案 2 :(得分:0)

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

答案 3 :(得分: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);
        }
    });     
}

此链接帮助我了解了这一点。 Update textView from thread