美文网首页
ListView 添加数据 (BaseAdapter)

ListView 添加数据 (BaseAdapter)

作者: 穿越平行宇宙 | 来源:发表于2019-03-15 09:16 被阅读0次
    • 步骤:
    1. 在xml文件中定义ListView标签
    2. 创建一个布局item,布局中创建ListView中要显示的条目布局
    3. 创建一个类继承BaseAdapter,并实现抽象类中的四个抽象方法
      并把要在ListView中显示的数据传递给这个类对象
      BaseAdapter中的抽象方法
      public int getCount() //此方法返回决定了ListView创建了多少个条目
      public Object getItem(int arg0) //根据索引返回需要在指定位置显示的数据对象
      public Long getItemId(int arg0) //此方法 根据索引返回id
        //每绘制一次条目就会调用一次这个方法,在此方法中指定绘制条目的样式,
        //并把要显示的相应数据添加到对应的条目控件中
        //postion 表示下一次将要绘制第几个条目
        //contextView 默认值为null,我们给它重新赋值,用来指定条目样式
        //并获取条目中所有控件,给响应属性赋值        
        public View getView(int position,View contextView,ViewGroup parent)
    
    1. 创建自定义Adapter对象
    2. 把自定义Adapter对象添加进入ListView对象中
    • xml 文件
    1. activity_main.xml
    <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
        android:layout_width="match_parent"
        android:layout_height="match_parent"
        android:orientation="vertical"
        android:paddingLeft="20dp"
        android:paddingRight="20dp" >
    
    
        <ListView
            android:id="@+id/lv"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            />
            
    
        
    </LinearLayout>
    
    1. text.xml
    <?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" >
        
        <TextView 
            android:id="@+id/tv"
            android:layout_width="match_parent"
            android:layout_height="match_parent"
            android:textSize="50sp"
            android:text="dafdsl"
            />
        
    </LinearLayout>
    
    • java文件
    1. MyAdapter.java
    public class MyAdapter extends BaseAdapter {
    
    /*重写的方法
       getCount()返回ListView列表的长度
       getItem(int position)返回每个item视图对应的实体类对象
       getItemId(int position) 返回每个item视图对应的索引
       getView(int position, View convertView, ViewGroup parent) 返回每个item视图*/
    
        
        
        private Context context;
        private ArrayList<String> list;
        
        
        
        public MyAdapter(Context context, ArrayList<String> list) {
            super();
            this.context = context;
            this.list = list;
        }
    
        //此方法 返回值告诉ListView要创建多少各个长度列表
        @Override
        public int getCount() {
            // TODO Auto-generated method stub
            return list.size();
        }
    
        //此方法 会根据索引返回ListView中第arg0个显示的列表
        @Override
        public Object getItem(int arg0) {
            // TODO Auto-generated method stub
            return list.get(arg0);
        }
    
        //此方法 根据索引返回id
        @Override
        public long getItemId(int arg0) {
            // TODO Auto-generated method stub
            return arg0;
        }
    
        @Override
        //每绘制一次条目就会调用一次这个方法,在此方法中指定绘制条目的样式,
        //并把要显示的相应数据添加到对应的条目控件中
        //postion 表示下一次将要绘制第几个条目
        //contextView 默认值为null,我们给它重新赋值,用来指定条目样式
        //并获取条目中所有控件,给响应属性赋值
        public View getView(int position, View contextView, ViewGroup parent) {
            // TODO Auto-generated method stub
            
            // 获取指定索引值的数据
            String string = list.get(position);
    
            if (contextView == null) {
                // 通过LayoutInflater 类的 from 方法 再 使用 inflate()方法得到指定的布局
                // 得到ListView中要显示的条目的布局
                LayoutInflater from = LayoutInflater.from(context);
                contextView = from.inflate(R.layout.item, null);
                // 从要显示的条目布局中 获得指定的组件
                Temp.tv = (TextView) contextView.findViewById(R.id.tv);
            }
    
    
            // 设置数值
            Temp.tv.setText(string);
    
            // 返回布局
            return contextView;
        }
    
        //静态内部类,保证不一直查找此对象(优化)
        static class Temp {
            static TextView tv;
        }
    
    }
    
    1. MainActivity.java
    public class MainActivity extends Activity {
    
        @Override
        protected void onCreate(Bundle savedInstanceState) {
            super.onCreate(savedInstanceState);
            setContentView(R.layout.activity_main);
    
            //获取ListView的对象
            ListView lv = (ListView) findViewById(R.id.lv);
            
            //创建要显示的数据
            ArrayList<String> list = new ArrayList<String>();
            list.add("郭磊");
            list.add("石佳");
            list.add("张娜娜");
            //创建Adapter对象
            MyAdapter adapter = new MyAdapter(MainActivity.this, list);
            
            //把Adapter对象添加到视图ListView中
            lv.setAdapter(adapter);
            
            //ListView的监听(条目)
            lv.setOnItemClickListener(new OnItemClickListener() {
    
                @Override
                public void onItemClick(AdapterView<?> arg0, View arg1, int arg2,
                        long arg3) {
                    // TODO Auto-generated method stub
                    Toast.makeText(MainActivity.this, "Adapter"+arg1, Toast.LENGTH_SHORT).show();
                }
            }); 
            
        }
    
    
    }
    

    相关文章

      网友评论

          本文标题:ListView 添加数据 (BaseAdapter)

          本文链接:https://www.haomeiwen.com/subject/ivbkmqtx.html