zoukankan      html  css  js  c++  java
  • 安卓Listview 不规则项即不同item的运行

    在安卓中,listview  的item 是一个不断被轮询调换位置的过程,这样

    即 图片参考地址   http://www.cnblogs.com/mybkn/archive/2012/05/23/2514681.html   谢谢。

    开发中 ,我们经藏会遇到listview  的每一项都不同的需求。   这个时候如果使用 以前自定义的BaseAdapter的方法的话 。在滚动的时候就会出现item布局错乱的情况,也就是说 第一项在最初的背景是红色的xml布局, 当滚动到第二项置顶,在回到顶部的时候, 顶部的项布局可能就不是最初的样子了。

       

    这种情况, 如果依然按照原先的方式的话,  当刚滑动至第一项消失,就会把第一项拿到底部。

    但是如果实现下面方法 ,系统在你滑动de 时候就会判定,当前第一项消失的类型,并不是我要填充的类型就不会把他从第一行拿掉,去填充尾部,而是调用getview 告诉listview 要添加的项 view是空的 ,你去重新new个新的吧。  

    当返回顶部的时候,系统再次判断,即将显示的类型斌不是我底部的类型,就不会吧底部的项移到前面 ,而是复用刚刚的那个。

    怎么才能解决这个问题呢

      我们需要做这些工作:

      1)重写 getViewTypeCount() – 该方法返回多少个不同的布局

      2)重写 getItemViewType(int) – 根据position返回相应的Item

      3)根据view item的类型,在getView中创建正确的convertView

        private RunRankAdapter runRankAdapter; 
        public  ArrayList<View>  listViews ;
        public ViewPager mPager;
        @Override
        protected void onCreate(Bundle savedInstanceState) {
            super.onCreate(savedInstanceState);
            setContentView(R.layout.activity_main);
            Gson gson = new Gson(); 
         
            ArrayList<String> runRank=new ArrayList<String>();
            for(int i =0;i<500;i++)
            {
                runRank.add("dsdf");
            }
            
            ListView lv_runRank;
         
            runRankAdapter = new RunRankAdapter(this, runRank);  
            lv_runRank = (ListView) findViewById(R.id.listView1);  
            lv_runRank.setAdapter(runRankAdapter);
    class RunRankAdapter extends BaseAdapter {
            ArrayList<String> ls;
            Context mContext;
            LinearLayout linearLayout = null;
            LayoutInflater inflater;
            TextView tex;
            final int VIEW_TYPE = 3;
            final int TYPE_1 = 0;
            final int TYPE_2 = 1;
            final int TYPE_3 = 2;
    
            public RunRankAdapter(Context context,
                    ArrayList<String> list) {
                ls = list;
                mContext = context;
            }
    
            @Override
            public int getCount() {
                return ls.size();
            }
    
            @Override
            public Object getItem(int position) {
                return ls.get(position);
            }
    
            @Override
            public long getItemId(int position) {
                return 0;
            }
    
            // 每个convert view都会调用此方法,获得当前所需要的view样式
            @Override
            public int getItemViewType(int position) {
                int p = position;
                if (p == 0)
                    return TYPE_1;
                else if (p == 1)
                    return TYPE_2;
                else
                    return TYPE_3;
            }
    
            @Override
            public int getViewTypeCount() {
                return 3;
            }
    
            @Override
            public View getView(int position, View convertView, ViewGroup parent) {
                ViewHolder1 holder1 = null;
                ViewHolder2 holder2 = null;
                ViewHolder3 holder3 = null;
                int type = getItemViewType(position);
                if (convertView == null) {
                    inflater = LayoutInflater.from(mContext);
                    // 按当前所需的样式,确定new的布局
                    switch (type) {
                    case TYPE_1:
    
                        convertView = inflater.inflate(R.layout.item_one,
                                parent, false);
    //                    holder1 = new ViewHolder1();
    //                    holder1.rank1 = (TextView) convertView
    //                            .findViewById(R.id.tv_list1_rank);
    //                    holder1.time1 = (TextView) convertView
    //                            .findViewById(R.id.tv_list1_time);
    //                    convertView.setTag(holder1);
                        break;
                    case TYPE_2:
                        convertView = inflater.inflate(R.layout.item_two,
                                parent, false);
    //                    holder2 = new ViewHolder2();
    //                    holder2.rank2 = (TextView) convertView
    //                            .findViewById(R.id.tv_list2_rank);
    //                    holder2.time2 = (TextView) convertView
    //                            .findViewById(R.id.tv_list2_time);
    //                    convertView.setTag(holder2);
                        break;
                    case TYPE_3:
                        convertView = inflater.inflate(R.layout.item_3,
                                parent, false);
    //                    holder3 = new ViewHolder3();
    //                    holder3.rank3 = (TextView) convertView
    //                            .findViewById(R.id.tv_list3_rank);
    //                    holder3.time3 = (TextView) convertView
    //                            .findViewById(R.id.tv_list3_time);
    //                    convertView.setTag(holder3);
                        break;
                    default:
                        break;
                    }
    
                } else {
    //                switch (type) {
    //                case TYPE_1:
    //                    holder1 = (ViewHolder1) convertView.getTag();
    //                    break;
    //                case TYPE_2:
    //                    holder2 = (ViewHolder2) convertView.getTag();
    //                    break;
    //                case TYPE_3:
    //                    holder3 = (ViewHolder3) convertView.getTag();
    //                    break;
    //                }
                }
                // 设置资源
    //            switch (type) {
    //            case TYPE_1:
    //                holder1.rank1.setText("" + (position + 1));
    //                holder1.time1.setText(ls.get(position).get("time").toString());
    //                break;
    //            case TYPE_2:
    //                holder2.rank2.setText("" + (position + 1));
    //                holder2.time2.setText(ls.get(position).get("time").toString());
    //                holder2.totaldistance2.setText(ls.get(position)
    //                break;
    //            case TYPE_3:
    //                holder3.rank3.setText("" + (position + 1));
    //                holder3.time3.setText(ls.get(position).get("time").toString());
    //                break;
    //            }
    
                return convertView;
            }
    
            public class ViewHolder1 {
                TextView rank1;
                TextView time1;
            }
    
            public class ViewHolder2 {
                TextView rank2;
                TextView time2;
            }
    
            public class ViewHolder3 {
                TextView rank3;
                TextView time3;
            }
        }
    适配器
  • 相关阅读:
    ubuntu系统安装Loadrunner压力机和负载端(linux agent)
    LoadRunner生成二进制参数的方法
    [02]树莓派无线USB网卡,Mercury WIFI配置
    6.4节“末端端接器的交流偏置”
    MIPS32的DIV和DIVU实现(除法指令)
    5.3节“开槽地平面的串扰”
    给自己挖坑
    电容降额
    MIPS32的ADDI和ADDIU的实现要点(加法指令)
    使用加法器实现减法
  • 原文地址:https://www.cnblogs.com/zey23/p/3852181.html
Copyright © 2011-2022 走看看