zoukankan      html  css  js  c++  java
  • ListView显示多种类型的item

    ListView可以显示多种类型的条目布局,这里写显示两种布局的情况,其他类似

    这是MainActivity:,MainActivity的布局就是一个ListView

    public class MainActivity extends Activity {
    
        private ListView lv;
        private List<People> lists;
    
        @Override
        protected void onCreate(Bundle savedInstanceState) {
            super.onCreate(savedInstanceState);
            setContentView(R.layout.activity_main);
            lv = (ListView) findViewById(R.id.lv);
    
            lists=new ArrayList<>();
            //0代表学生,1代表老师
            People people1 = new People(0, "10");//类型,钱
            People people2 = new People(1, "100");
            People people3 = new People(1, "100");
            People people4 = new People(0, "10");
            lists.add(people1);
            lists.add(people2);
            lists.add(people3);
            lists.add(people4);
    
            lv.setAdapter(new MyAdapter());
        }
    
        class MyAdapter extends BaseAdapter{
    
            @Override
            public int getCount() {
                return lists.size();
            }
    
            @Override
            public Object getItem(int i) {
                return lists.get(i );
            }
    
            @Override
            public long getItemId(int i) {
                return i;
            }
    
            @Override
            public int getItemViewType(int position) {
                if(lists.get(position).getType()==0){//当前JavaBean对象的类型
                    return 0;//学生类型
                }else if(lists.get(position).getType()==1){
                    return 1;//老师类型
                }else {
                    return 100;
                }
    
            }
    
            @Override
            public int getViewTypeCount() {
                return 2;//总共有两个类型
            }
    
            @Override
            public View getView(int position, View convertView, ViewGroup viewGroup) {
                int currentType = getItemViewType(position);//当前类型
                if(currentType==0){//学生类型
                    StudentViewHolder studentViewHolder;
                    if(convertView==null){
                        studentViewHolder=new StudentViewHolder();
                        convertView=View.inflate(MainActivity.this,R.layout.item_lv_student,null);
                        studentViewHolder.tv0= (TextView) convertView.findViewById(R.id.num_money_stu);
                        convertView.setTag(studentViewHolder);
                    }else{
                        studentViewHolder= (StudentViewHolder) convertView.getTag();
                    }
                    //数据填充
                    studentViewHolder.tv0.setText(lists.get(position).getMoney());
                }else if(currentType==1){//老师类型
                    TeacherViewHolder teacherViewHolder;
                    if(convertView==null){
                        teacherViewHolder=new TeacherViewHolder();
                        convertView=View.inflate(MainActivity.this,R.layout.item_lv_teacher,null);
                        teacherViewHolder.tv1= (TextView) convertView.findViewById(R.id.num_money_teacher);
                        convertView.setTag(teacherViewHolder);
                    }else{
                        teacherViewHolder= (TeacherViewHolder) convertView.getTag();
                    }
                    //数据填充
                    teacherViewHolder.tv1.setText(lists.get(position).getMoney());
                }
    
    
                return convertView;
    
            }
        }
        /**学生item的Holder*/
        class StudentViewHolder {
            TextView tv0;
        }
        /**老师item的Holder*/
        class TeacherViewHolder {
            TextView tv1;
        }
    }

    JavaBean对象:

    /**模仿的Json对象,Json对象里一定要带类型,区分学生和老师
     * Created by xhj on 16-1-8.
     */
    public class People {
        /**类型,0表示学生,1表示老师*/
        public int type;
        public String money;
    
        public People(int type, String money) {
            this.type = type;
            this.money = money;
        }
    
        public int getType() {
            return type;
        }
    
        public void setType(int type) {
            this.type = type;
        }
    
        public String getMoney() {
            return money;
        }
    
        public void setMoney(String money) {
            this.money = money;
        }
    }

    ListView学生Item的布局:

    <?xml version="1.0" encoding="utf-8"?>
    <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
        android:layout_width="match_parent"
        android:layout_height="match_parent"
        android:orientation="horizontal"
        android:background="#00ff00"
        >
    
            <TextView
                android:layout_width="wrap_content"
                android:layout_height="wrap_content"
                android:text="学生的钱:" />
    
            <TextView
                android:id="@+id/num_money_stu"
                android:layout_width="wrap_content"
                android:layout_height="wrap_content"
                android:text="10" />
    
        <Button
            android:layout_width="match_parent"
            android:layout_height="wrap_content"
            android:text="学生布局"
            android:id="@+id/button" />
    
    </LinearLayout>

    ListView老师Item的布局:

    <?xml version="1.0" encoding="utf-8"?>
    <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
        android:layout_width="match_parent"
        android:layout_height="match_parent"
        android:orientation="horizontal"
        android:background="#f9a5b2">
    
        <TextView
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:text="老师的钱:"/>
        <TextView
            android:id="@+id/num_money_teacher"
            android:layout_width="match_parent"
            android:layout_height="wrap_content"
            android:text="100"/>
    </LinearLayout>

    结果图:

  • 相关阅读:
    混合模式程序集是针对“v2.0.50727”版的运行时生成的,在没有配置其他信息的情况下,无法在 4.0 运行时中加载该程序集。
    SQL中获取自增长的最大ID
    (inline)内联函数在IOS开发中的使用
    MS SQL SERVER 2005 高可用性之日志传送
    19_toast通知和notify通知 onTouch事件响应
    20 按比例设置 子控件的宽度和高度
    18_SurfaceView 其他线程绘图
    使用Microsoft Media Service实现网络影音多媒体应用系列第三篇技术要点
    使用Microsoft Media Service实现网络影音多媒体应用系列第二篇开发须知
    MVC3WIN7下的IIS7.5部署MVC3应用程序
  • 原文地址:https://www.cnblogs.com/android-yus/p/5112816.html
Copyright © 2011-2022 走看看