zoukankan      html  css  js  c++  java
  • 【原创】SimpleAdatper动态改变Layout布局

    大部分有聊天功能的APP的聊天界面都是使用上图所示的界面布局,即本方和对方的聊天内容分别放置在屏幕的左右两边。

    要实现上述的效果,可以使用ListView绑定一个SimpleAdatper子类,在SimpleAdatper子类中重写getView方法。在getView中判断消息是谁发送的,并返回相应的View:

        //定义一个扩展的SimpleAdapter
        private class ExSimpleAdapter extends SimpleAdapter{
            
            public ExSimpleAdapter(Context context,
                    List<? extends Map<String, ?>> data, int resource,
                    String[] from, int[] to) {
                super(context, data, resource, from, to);
                // TODO Auto-generated constructor stub
            }
    
            @Override
            public View getView(int position, View convertView, ViewGroup parent) {
                // TODO Auto-generated method stub
                LayoutInflater mLayoutInflater = LayoutInflater.from(ChatActivity.this);
                if(mMsgFromList.get(position))
                    convertView = mLayoutInflater.inflate(R.layout.message_right, null);
                else
                    convertView = mLayoutInflater.inflate(R.layout.message_left, null);
                
                return super.getView(position, convertView, parent);
            }
        }

    1. 这里message_right和message_left就是左右布局的Layout.

    2. private ArrayList<Boolean> mMsgFromList = new ArrayList<Boolean>(); 用于记录每条消息是谁发送的。

    这样每次调用mSimpleAdapter的notifyDataSetChanged()方法就会更新相应的聊天界面了。

  • 相关阅读:
    bzoj3223: Tyvj 1729 文艺平衡树
    bzoj1014: [JSOI2008]火星人prefix
    bzoj3231: [Sdoi2008]递归数列
    bzoj2282: [Sdoi2011]消防
    bzoj3195: [Jxoi2012]奇怪的道路
    成员内部类 局部内部类 匿名内部类
    静态代码块 构造代码块
    父类子类转换
    clone()方法
    后缀表达式求值
  • 原文地址:https://www.cnblogs.com/hengfeng/p/2907717.html
Copyright © 2011-2022 走看看