Android RecyclerView鐨凷taggeredGridLayoutManager瀹炵幇浜ら敊鎺掑垪鐨勫瓙鍏冪礌鍒嗙粍

鍏堢湅瀹炵幇鐨勭粨鏋滃鍥撅細

璁捐鑳屾櫙锛氱幇鍦ㄧ殑浜у搧瀵硅璁$殑闇€姹傝秺鏉ヨ秺澶氭牱鍖栵紝濡傞檮褰曟枃绔?鏄吀鍨嬬殑鑱旂郴浜哄垎缁凴ecyclerView锛屽瓙鍏冪礌鎺掑垪鍒颁竴涓浉鍚岀殑缁勶紝浣嗘槸鏈変簺鏃跺€欙紝UI瑕佹眰鎶婅繖浜涘厓绱犱笉鏄瀭鐩存柟鍚戠殑锛岃€屾槸鍍忔湰鏂囧紑澶寸殑鍥句腑鎵€绀烘牱寮忔帓鍒楋紝杩欏氨闇€瑕佺敤StaggeredGridLayoutManager瑙勫垝RecyclerView锛屽湪闄勫綍鏂囩珷2鐨勫熀纭€涓婃敼閫狅紝浠g爜锛?
package app.zhangphil.app;import android.graphics.Color;import android.support.v7.app.AppCompatActivity;import android.os.Bundle;import android.support.v7.widget.RecyclerView;import android.support.v7.widget.StaggeredGridLayoutManager;import android.view.LayoutInflater;import android.view.View;import android.view.ViewGroup;import android.widget.TextView;import java.util.ArrayList;public class MainActivity extends AppCompatActivity {    private final int TYPE_GROUP = 0xa01;    private final int TYPE_CHILD = 0xa02;    private String[] groupNames = {"A", "B", "C", "D", "E", "F", "G"};    private ArrayList mItems;    @Override    protected void onCreate(Bundle savedInstanceState) {        super.onCreate(savedInstanceState);        setContentView(R.layout.activity_main);        mItems = new ArrayList<>();        for (int i = 0; i < groupNames.length; i++) {            Group group = new Group();            group.position = i;            group.title = groupNames[i];            mItems.add(group);            int count = (int) (Math.random() * 100) % 9 + 1;            for (int j = 0; j < count; j++) {                Child child = new Child();                child.position = j;                child.groupPos = i;                child.groupName = group.title;                mItems.add(child);            }        }        RecyclerView mRecyclerView = findViewById(R.id.recycler_view);        StaggeredGridLayoutManager layoutManager = new StaggeredGridLayoutManager(4, StaggeredGridLayoutManager.VERTICAL);        mRecyclerView.setLayoutManager(layoutManager);        RecyclerViewAdapter mAdapter = new RecyclerViewAdapter();        mRecyclerView.setAdapter(mAdapter);    }    public class RecyclerViewAdapter extends RecyclerView.Adapter {        @Override        public ItemVH onCreateViewHolder(ViewGroup parent, int viewType) {            View view;            ItemVH itemVH = null;            switch (viewType) {                case TYPE_GROUP:                    view = LayoutInflater.from(parent.getContext()).inflate(android.R.layout.simple_list_item_1, parent, false);                    itemVH = new GroupVH(view);                    StaggeredGridLayoutManager.LayoutParams layoutParams = new StaggeredGridLayoutManager.LayoutParams(ViewGroup.LayoutParams.MATCH_PARENT, ViewGroup.LayoutParams.WRAP_CONTENT);                    layoutParams.setFullSpan(true);                    itemVH.itemView.setLayoutParams(layoutParams);                    break;                case TYPE_CHILD:                    view = LayoutInflater.from(parent.getContext()).inflate(android.R.layout.simple_list_item_2, parent, false);                    itemVH = new ChildVH(view);                    break;            }            return itemVH;        }        @Override        public void onBindViewHolder(ItemVH holder, int position) {            Item item = mItems.get(position);            switch (getItemViewType(position)) {                case TYPE_GROUP:                    Group g = (Group) item;                    GroupVH groupVH = (GroupVH) holder;                    groupVH.text1.setText(g.title);                    break;                case TYPE_CHILD:                    Child c = (Child) item;                    ChildVH childVH = (ChildVH) holder;                    childVH.text1.setText(c.groupName);                    childVH.text2.setText(c.position + "");                    break;            }        }        @Override        public int getItemCount() {            return mItems.size();        }        @Override        public int getItemViewType(int position) {            return mItems.get(position).getType();        }    }    private class Group extends Item {        public String title;        @Override        public int getType() {            return TYPE_GROUP;        }    }    private class Child extends Item {        public int groupPos;        public String groupName;        @Override        public int getType() {            return TYPE_CHILD;        }    }    private abstract class Item {        public int position;        public abstract int getType();    }    private class GroupVH extends ItemVH {        public TextView text1;        public GroupVH(View itemView) {            super(itemView);            text1 = itemView.findViewById(android.R.id.text1);            text1.setBackgroundColor(Color.RED);        }        @Override        public int getType() {            return TYPE_GROUP;        }    }    private class ChildVH extends ItemVH {        public TextView text1;        public TextView text2;        public ChildVH(View itemView) {            super(itemView);            text1 = itemView.findViewById(android.R.id.text1);            text2 = itemView.findViewById(android.R.id.text2);            text1.setTextColor(Color.LTGRAY);            text2.setTextColor(Color.BLUE);        }        @Override        public int getType() {            return TYPE_CHILD;        }    }    private abstract class ItemVH extends RecyclerView.ViewHolder {        public ItemVH(View itemView) {            super(itemView);        }        public abstract int getType();    }}

閲嶇偣鏄湪onCreateViewHolder鏃跺€欙紝鐢⊿taggeredGridLayoutManager.LayoutParams浣垮緱褰撳墠鐨刅iewHolder鎵╁厖锛圡ATCH_PARENT锛夋暣涓竷灞€锛屽苟涓旓細

layoutParams.setFullSpan(true);
瀹炵幇缁撴灉灏辨槸鏈枃寮€澶寸殑鍥句腑鎵€绀烘牱寮忋€?
闄勫綍锛?
1锛屻€夾ndroid RecyclerView鐨凷taggeredGridLayoutManager鍜孋ardView銆嬮摼鎺ワ細https://blog.csdn.net/zhangphil/article/details/47604581聽
2锛屻€夾ndroid RecyclerView瀹炵幇瀛愬厓绱犵殑Group鍒嗙粍锛孡inearLayoutManager鍨傜洿鏂瑰悜銆嬮摼鎺ワ細https://blog.csdn.net/zhangphil/article/details/79758587聽

更多相关文章

  1. 代码中设置drawableleft
  2. android 3.0 隐藏 系统标题栏
  3. Android开发中activity切换动画的实现
  4. Android(安卓)学习 笔记_05. 文件下载
  5. Android中直播视频技术探究之—摄像头Camera视频源数据采集解析
  6. 技术博客汇总
  7. android 2.3 wifi (一)
  8. AndRoid Notification的清空和修改
  9. Android中的Chronometer

随机推荐

  1. Android调起高德地图
  2. Android(安卓)Timer的用法示例
  3. 自定义控件--虚线
  4. Android(安卓)代码设置来电铃声
  5. Android(安卓)7.1.2(Android(安卓)N) Act
  6. Android在WebView上构建Web应用程序
  7. eclipse ADT在线安装 https://dl-ssl.goo
  8. Android(安卓)App 权限一点知识
  9. android 自定义控件(邮箱边写边出格式邮箱
  10. Most Popular Android(安卓)Downloads Of