Android 中的聊天应用程序,以便发送者和接收者消息应该位于不同的一侧

2024-01-25

 protected void onPostExecute( ArrayList<HashMap<String,String>> myArrayList)//    for arraylist(ArrayList<String> result)
   {                            

       for (HashMap<String, String> data : myArrayList)
      {
           String sender_no = data.get(TAG_SENDER_NO);
           String msg1=data.get(TAG_SEN_MSG);
           String receiver_no=data.get(TAG_RECEIVER_NO);

           if(sender_no.equals(senderno))
           {

           ListAdapter adapter = new SimpleAdapter(SinglechatActivity.this, myArrayList,R.layout.list_row_layout_even, 
           new String[] { TAG_SEN_MSG },new int[] { R.id.message_me });

        //  CustomList adapter= new CustomList(SinglechatActivity.this,myArrayList);//sender_no,  msg1,   receiver_no);

         ListView  lv = (ListView) findViewById(R.id.listview);
           lv.setAdapter( adapter);

          }

           else

           {
               ListAdapter adapter = new SimpleAdapter(SinglechatActivity.this, myArrayList,R.layout.list_row_layout_odd, 
                       new String[] { TAG_SEN_MSG },new int[] { R.id.message_frnd });

                //  CustomList adapter= new CustomList(SinglechatActivity.this,  sender_no,  msg1,   receiver_no);

                 ListView  lv = (ListView) findViewById(R.id.listview);
                   lv.setAdapter( adapter);

           }

在此,我希望根据发送者和接收者在右侧和左侧显示消息。


Use Custom adapter发送者和接收者消息具有单独的布局。它被称为Heterogeneous ListView.

像这样的东西

public class MyAdapter extends BaseAdapter {

    ArrayList<HashMap<String,String>> messages;
    int SENDER_MESSAGE = 0;
    int RECEIVER_MESSAGE = 1;
    Context context;

    @Override
    public int getCount() {
        return messages.size();
    }

    @Override
    public Object getItem(int position) {
        return messages.get(position);
    }

    @Override
    public long getItemId(int position) {
        return position;
    }

    @Override
    public int getViewTypeCount() {
        return 2;
    }

    @Override
    public int getItemViewType(int position) {

        //This is dummy logic
        //Write your own logic to differentiate between sender and receiver message
        if (position % 2 == 0) {
            return SENDER_MESSAGE;
        }

        else {
            return RECEIVER_MESSAGE;
        }
    }

    @Override
    public View getView(int position, View convertView, ViewGroup parent) {

        if (convertView == null) {
            LayoutInflater inflater = (LayoutInflater) context.getSystemService(Context.LAYOUT_INFLATER_SERVICE);

            if (getItemViewType(position) == SENDER_MESSAGE) {
                convertView = inflater.inflate(R.layout.sender_message_layout, null);
            } 

            else {
                //Received message
                convertView = inflater.inflate(R.layout.received_message_layout, null);
            }
        }

            //...set text to message layout here


    }



}

欲了解更多信息Custom Adapter你可以参考这个

http://www.vogella.com/articles/AndroidListView/article.html#adapterown_example http://www.vogella.com/articles/AndroidListView/article.html#adapterown_example

对于异构ListView(ListView中的不同行布局)教程,您可以参考此

http://chrislee.kr/wp/tag/getitemviewtype-tutorial/ http://chrislee.kr/wp/tag/getitemviewtype-tutorial/

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

Android 中的聊天应用程序,以便发送者和接收者消息应该位于不同的一侧 的相关文章

随机推荐

  • Exchange Web 服务创建会议请求工作示例

    是否有关于如何使用 C 使用 EWS for Exchange 2007 创建会议请求的工作示例 需要哪些属性 我添加了一个 Web 服务引用 并且可以连接以创建和发送各种项目 但不断收到错误 设置操作对属性无效 关于响应消息 它从来没有说
  • 在 Visual Studio 2008 中更改字体大小和样式

    Visual Studio 2008 中更改字体大小和字体类型的设置在哪里 使用菜单Tools gt Options gt 内部环境 gt 字体和颜色
  • iFrame:如何使用 javascript 将服务器响应(HTML)直接显示到 iFrame 中?

    我收到一个简单的服务器响应 它是一个 html 文件 我想在 iFrame 中显示相同的内容 而不将该文件保存到我的工作区或计算机中 我正在进行 ajax 调用 如下所示 Ext Ajax request url url method PO
  • 字符识别(OCR算法)[关闭]

    Closed 这个问题需要多问focused help closed questions 目前不接受答案 我正在开发一个项目 其中我必须开发 OCR 算法 我必须从图像中读取文本 然后将其转换为不同的语言 所以我的第一个任务是从图像中获取文
  • Android编程打开DataUsage设置页面

    在 Android 5 0 中 移动数据设置可在数据使用设置中使用 我想在android中打开数据使用设置页面 但我没有找到任何打开它的意图 为什么要打开数据使用设置页面 你尝试过这种方法吗 final Intent intent new
  • MIN 和 MAX 宏的 Swift 等效项

    在 C Objective C 中 可以使用 MIN 和 MAX 宏找到两个数字之间的最小值和最大值 Swift 不支持宏 并且语言 基础库中似乎没有等效的宏 是否应该采用自定义解决方案 也许基于这样的泛型one http www cplu
  • 未捕获的语法错误:意外的标记 e

    I am getting Uncaught Syntax Error newly the only addition is sending retrieve json data from server to client How to in
  • 通过 Bash Shell 脚本从 url 列表中提取父域名

    我有一个像这样的网址列表 http noto zrobimystrone pl pucenter images NGdocs http visionwebmkt com unsubscribe php M 879552 C b744d324
  • 列出给定库模块中的谓词

    有没有办法列出 SICStus Prolog 给定库模块中定义的所有谓词 例如如果我加载列表模块 use module library lists 我可以从提示符中运行另一个谓词来告诉我刚刚导入了哪些谓词吗 这适用于 SWI Prolog
  • 哪种 pyspark 抽象适合我的大型矩阵乘法?

    我想执行大型矩阵乘法 C A B T然后通过应用严格的阈值来过滤 C 收集形式为 行索引 列索引 值 的列表 A 和 B 很稀疏 条目大多为零 它们最初表示为稀疏 scipy csr 矩阵 矩阵的大小 当它们是密集格式时 答 9G 900
  • 有关构建 RDBMS 的资源 [关闭]

    Closed 这个问题正在寻求书籍 工具 软件库等的推荐 不满足堆栈溢出指南 help closed questions 目前不接受答案 我正在考虑实施 RDBMS 有没有关于数据库内部工作原理以及在开始构建自己的数据库时需要了解哪些内容的
  • JavaScript 选择/范围框架

    我一直在使用选择 范围对象 并且由于浏览器之间对于特定选择 范围内容 甚至超过 DOM 存在大量不一致 我想知道是否有一个框架可以帮助我解决这些问题 我编写了一个新的范围 选择库 名为Rangy http code google com p
  • 将字符串转换为带时区的日期

    我有一个格式为 yyyy MM dd hh mm a 的字符串 我可以单独获取时区对象 其中上面的字符串代表日期 我想将其转换为以下格式 yyyy MM dd HH mm ss Z 我怎样才能做到这一点 您可以使用简单日期格式 http d
  • AVAudioSession:某些蓝牙设备在我的应用程序上无法正常工作

    我正在使用 AVAudioSession 开发一个快速的音频 视频和文本聊天 iOS 应用程序 每当我选择使用某些蓝牙设备时 设备上播放的声音不是应用程序音频流 每当发送 接收消息时 它们仅播放文本聊天库发送的系统声音 并非所有蓝牙设备都会
  • null 参数的 IllegalArgumentException 或 NullPointerException? [关闭]

    Closed 这个问题是基于意见的 help closed questions 目前不接受答案 我有一个简单的属性设置方法null不适合此特定属性 我一直在这种情况下左右为难 我应该扔一个吗 IllegalArgumentException
  • 如何从 Oreo 的内部存储中打开 PDF 文件?

    我尝试在 Oreo 中打开 PDF 文件 但打不开 我没有收到任何错误 有什么问题吗 PDF 文件无法打开 仅显示黑屏 在 logcat 中没有显示错误 怎么了 我该如何解决这个问题 我引用了很多链接但没有得到解决方案 我也尝试了很多代码但
  • 对于简单的类型不匹配,出现错误“未为 `std::string::String` 实现特征 `std::ops::FnMut<(char,)>`”[重复]

    这个问题在这里已经有答案了 let mystring format the quick brown fox assert mystring ends with mystring Error the trait std ops FnMut l
  • 删除“NUL”字符

    我的记事本 中有这样的字符 当我尝试复制整行时 我实际上正在复制所有内容 直到 NUL File 1 我想做的就是替换那些空的 什么都没有 这样我就可以复制我的整行 也许有任何关键字可以告诉记事本 或任何其他可能有帮助的程序 替换这些字符
  • 如何减少 CUDA 同步延迟/延迟

    这个问题与使用cuda流运行多个内核有关 CUDA中有很多同步命令 cudaStream同步 Cuda设备同步 cuda线程同步 还有 cudaStreamQuery 来检查流是否为空 我注意到在使用探查器时 这些同步命令会给程序带来很大的
  • Android 中的聊天应用程序,以便发送者和接收者消息应该位于不同的一侧

    protected void onPostExecute ArrayList