在对话之间导航并查看以前的消息

时间:2013-12-11 08:38:49

标签: android messages instant-messaging

我有会话列表和信使用户界面..我想要的是:当点击对话列表中的项目时,信使用户界面会显示该特定对话消息。 我的尝试:到目前为止,我还没有对此部分进行编码,我只想找一个主意,将每条消息立即保存到数据库中是好主意,当我在对话之间导航时删除相应的消息?

2 个答案:

答案 0 :(得分:1)

我想在DB中保存conv并不是一个好主意。您应该序列化数据,还是应该使用文件来保存。或者更确切地说,您可以使用分隔符进行随机访问。

答案 1 :(得分:1)

最近我一直在做类似的事情。为了达到这个目的,我使用了一个TabHost,并将每个可能转换为TextView的FrameLayout关联起来,这就是我想要的。

这种方法有一个障碍:您只能访问当前打开的选项卡视图(在本例中为TextView)。如果您不打算将文本添加到非活动选项卡,则无需进一步操作,因为TabHost会处理每个选项卡的先前消息。但是,例如,如果要将消息添加到非活动选项卡,则必须先将它们存储在队列中,并在激活选项卡后,使用OnTabChangedListener事件处理它们。

这是我对TabHost结构的定义:

<LinearLayout xmlns:tools="http://schemas.android.com/tools"
    xmlns:android="http://schemas.android.com/apk/res/android"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:orientation="vertical"
    tools:context=".MainActivity" >

<LinearLayout
            android:id="@+id/TabContainer"
            android:layout_width="match_parent"
            android:layout_height="wrap_content"
            android:layout_weight="99"
            android:orientation="vertical">
  <TabHost
            android:id="@+android:id/tabhost"
            android:layout_width="match_parent"
            android:layout_height="match_parent">
    <LinearLayout
            android:id="@+id/TabLinearLayout"
            android:layout_width="match_parent"
            android:layout_height="match_parent"
            android:orientation="vertical">
      <!-- This makes your TabHost horizontally scrollable if it reaches a certain number of tabs -->
      <HorizontalScrollView
            android:layout_width="fill_parent"
            android:layout_height="wrap_content"
            android:fillViewport="true"
            android:scrollbars="none">
        <TabWidget
            android:id="@+android:id/tabs"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"></TabWidget>
      </HorizontalScrollView>
      <!-- You may also want to make this FrameLayour vertically scrollable -->
      <FrameLayout
        android:id="@+android:id/tabcontent"
        android:layout_width="match_parent"
        android:layout_height="match_parent"
        android:layout_marginTop="10dp"></FrameLayout>
    </LinearLayout>
  </TabHost>
</LinearLayout>

如果你需要在tabchange上处理事件,你应该有这样的事情:

final TabHost th = (TabHost) (this.findViewById(android.R.id.tabhost));
  th.setOnTabChangedListener(new OnTabChangeListener() {
  @Override
  public void onTabChanged(final String tabId) {
    // Here you do the stuff you need. tabId is the name (also called Indicator) of the activated tab
  }
});

您还应该了解控制每个选项卡的缓冲区。也就是说,控制每个标签不超过X条消息,好像它在没有控制的情况下增长,你的应用可能会开始反应迟钝。

当我编写这个部分时,这些链接可能会帮助你,就像我们对我做的那样:

https://gist.github.com/jerolimov/618086

http://androidituts.com/android-tab-layout-example/

http://learnandroideasily.blogspot.com.es/2013/07/android-tabwidget-example.html