1

Android用のメッセージングアプリのようなものを開発しています。メッセージがデータベースからカスタム リスト ビューに読み込まれると、問題なく表示されます。Androidのネイティブメッセージアプリと同じように表示させたいです。9Patch を使用して、送信者と受信者の 2 つのイメージが既にあります。この画像http://s21.postimg.org/bj6idzdaf/example.pngのように表示したい。しかし、現在、私はこのhttp://s23.postimg.org/805pfdxqz/example1.pngを持っています。行のコードは次のとおりです。

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

<!-- User and CreatedAt -->

<LinearLayout
    android:layout_width="match_parent"
    android:layout_height="wrap_content"
    android:orientation="horizontal"
    android:paddingBottom="0dp" >

    <TextView
        android:id="@+id/textUser"
        android:layout_width="0dip"
        android:layout_height="wrap_content"
        android:layout_weight="1"
        android:text="User"
        android:textSize="15sp" />

    <TextView
        android:id="@+id/textCreatedAt"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:text="Less than a minute"
        android:textSize="10sp" />
</LinearLayout>

<!-- Message -->

<TextView
    android:id="@+id/textText"
    android:layout_width="wrap_content"
    android:layout_height="wrap_content"
    android:paddingTop="0dp"
    android:text="I&apos;m text"
    android:textSize="12sp" />

    </LinearLayout>

レイアウトのコードは次のとおりです。

<?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" >

<ListView
    android:id="@+id/listTimeline"
    android:layout_width="fill_parent"
    android:layout_height="0dip"
    android:layout_weight="1"
    android:divider="#FFFFFF"
    android:dividerHeight="1dp"
    android:listSelector="@drawable/list_selector" />

<LinearLayout
    android:layout_width="match_parent"
    android:layout_height="wrap_content"
    android:orientation="horizontal" >

    <EditText
        android:id="@+id/messageText"
        android:layout_width="0dip"
        android:layout_height="wrap_content"
        android:layout_weight="1"
        android:ems="10"
        android:hint="@string/sendTextBoxHint" />

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

</LinearLayout>

リストビューでメッセージを取得して表示するコードは次のとおりです

class getAndDisplayMessages extends Thread {


    @Override
    public void run() {
        while (!stopCheckingForMessages) {
            try {
                theApp.appData.openReadableDatabase();
                cursor = theApp.appData.getMessages(user,
                        TheApplication.screenName);
                Log.d(TAG, "cursor containing " + cursor.getCount()
                        + " rows");
                if (cursor == null) {
                    return;
                }
                startManagingCursor(cursor);
                ChatActivity.this.runOnUiThread(new Runnable() {
                    @SuppressWarnings("deprecation")
                    public void run() {
                        String[] FROM = { AppData.T_TIME,
                                AppData.SENDER_SCREEN_NAME,
                                AppData.MESSAGES };
                        int[] TO = { R.id.textCreatedAt, R.id.textUser,
                                R.id.textText };
                        adapter = new SimpleCursorAdapter(
                                ChatActivity.this, R.layout.chat_row,
                                cursor, FROM, TO);
                        adapter.setViewBinder(VIEW_BINDER);

                        listTimeline.setAdapter(adapter);
                        listTimeline.setSelection(adapter.getCount()-1);
                    }
                });

                Thread.sleep(DELAY);
            } catch (Exception e) {
                Log.e(TAG,
                        "Error Occured while checking for updated messages. \nErrorMessage:"
                                + e.getMessage());
            }
        }
    }

}
4

1 に答える 1

0

これを機能させるには、カスタム アダプターを作成する必要があります。

getView メソッド内に、別の xml レイアウトを挿入できます:-

listitemSender_layout.xml listitemReciever_layout.xml

    public View getView(final int position, View convertView, ViewGroup parent) {
            if(convertView == null)
            {

                LayoutInflater vi = (LayoutInflater) context
                        .getSystemService(Context.LAYOUT_INFLATER_SERVICE);


                if(id == SENDER_ID)
                {
                        convertView = vi.inflate(R.layout.listitemSender_layout, null);
                }else
                {
                        convertView = vi.inflate(R.layout.listitemReciever_layout, null);
                }
    }

これらのxmlレイアウトで異なる背景画像を設定できます。他のすべてのコンポーネントは、両方のレイアウトで似ています。

ありがとう。

于 2013-05-04T12:53:35.100 に答える