Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/344.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/android/232.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 安卓泡泡聊天第一条用户信息后的不同布局_Java_Android_Android Layout_Android Listview_Chat - Fatal编程技术网

Java 安卓泡泡聊天第一条用户信息后的不同布局

Java 安卓泡泡聊天第一条用户信息后的不同布局,java,android,android-layout,android-listview,chat,Java,Android,Android Layout,Android Listview,Chat,我正在聊天应用程序的listview适配器中创建“气泡”样式的消息表示。这就是我想要达到的效果: 如您所见,若用户在一行中写入两条或更多消息,则第二条用户消息应以不同的布局显示(无图片)。我怎样才能做到这一点?因为它看起来很复杂。我是否应该检查适配器中的最后一个消息类型(看起来不太可靠)?或者在我的邮件对象中添加并稍后检查附加字段?任何示例或帮助都将不胜感激。我假设您有这样一个Message类: class Message { public String text; publi

我正在聊天应用程序的listview适配器中创建“气泡”样式的消息表示。这就是我想要达到的效果:


如您所见,若用户在一行中写入两条或更多消息,则第二条用户消息应以不同的布局显示(无图片)。我怎样才能做到这一点?因为它看起来很复杂。我是否应该检查适配器中的最后一个消息类型(看起来不太可靠)?或者在我的邮件对象中添加并稍后检查附加字段?任何示例或帮助都将不胜感激。

我假设您有这样一个Message类:

class Message {
    public String text;
    public String avatar;
}
因此,在getView方法中,您可以轻松检查上一项:

ArrayList<Message> mMessages;
...
public View getView (int position, View convertView, ViewGroup parent){      
    if( convertView == null ){
         if (position > 0 && mMessages.get(position-1).avatar.equal(mMessages.get(position).avatar)){
              // set layout for second message style
              convertView = inflater.inflate(R.layout.list_without_avatar, parent, false);
         } else {
              // set layout for the first message style
              convertView = inflater.inflate(R.layout.list_with_avatar, parent, false);
         }             
    }
    ...
    return convertView;
}
ArrayList消息;
...
公共视图getView(int位置、视图转换视图、视图组父级){
if(convertView==null){
if(位置>0&&mMessages.get(位置-1).avatar.equal(mMessages.get(位置).avatar)){
//设置第二个消息样式的布局
convertView=充气机。充气(R.layout.list_,无化身,父项,false);
}否则{
//设置第一个消息样式的布局
convertView=充气机。充气(R.layout.list_,带化身,父,假);
}             
}
...
返回视图;
}

希望能有帮助

使用不同的9个补丁。还有一个布尔值(比如说
isFirst
)。是的,将来我肯定会使用九个补丁。我知道这个解决方案可能基于简单的布尔/布尔。我只是从架构的角度感兴趣——在代码中使用布尔运算的确切位置。查看任何代码示例都很好。
查看任何代码示例都很好。
对我们来说也是如此。为了能够帮助你。无论如何,通过胡乱猜测:在你展示图片的地方是一个将布尔值设置为真的好地方。在显示第一个TextView之后(您可能更喜欢设置一个整数计数器,而不是布尔值),将其设置为false.yup,u r right,但还有另一种类似于您的方法。检查上一项的用户id,如果相同,则隐藏图片,如果不显示图片:)