ListView 学习笔记

ListView用来显示一个列表的控件,在开发中经常用到,介绍一下常用的ListView的用法:

根据列表的适配器类型,列表分为三种,ArrayAdapter,SimpleAdapter和 自定义Adapter(BaseAdapter):

1:ArrayAdapter 最简单的一种用法,通常用来展示单一的字符数据

public class MainActivity extends AppCompatActivity implements AdapterView.OnItemClickListener {

    private ListView listView;
    private String[] data = new String[] { "java", "Android","C++", "JavaScript", "Php", "JSP" };
    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate (savedInstanceState);
        setContentView (R.layout.activity_main);

        listView = (ListView) findViewById (R.id.listview);
        // 数据适配器的定义 (ArrayAdapter)
        ArrayAdapter<String> adapter = new ArrayAdapter<String>(this,android.R.layout.simple_list_item_1,data);
        // 给ListView设置数据适配器
        listView.setAdapter(adapter);
        // 设置ListView的元素被选中时的事件处理监听器
        listView.setOnItemClickListener(this);
    }

    @Override
    public void onItemClick(AdapterView<?> parent, View view, int position, long id) {
        // 获取点击ListView item中的内容信息
        String text = listView.getItemAtPosition (position)+" ";
        Log.i ("TAG","position ="+position+"=text="+text);

    }

2. simpleAdapter的扩展性最好,可以定义各种各样的布局出来

public class MainActivity extends AppCompatActivity implements AdapterView.OnItemClickListener {

    private ListView listView;
    private List<Map<String,Object>> mListData;

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate (savedInstanceState);
        setContentView (R.layout.activity_main);
        mListData = new ArrayList<Map<String, Object>>();

        listView = (ListView) findViewById (R.id.listview);
        // 数据适配器的定义 (simpleAdapter)(各参数名称,英文好的可以查看源码说明)
        /* context 上下文
         * data  数据源 一个map数据组成的list数据集合
         *       每一个map都对应listview中的一行数据
         *       map中每一行的数据,应该包括from中指定的所有条目
         * resource  布局文件ID
         * from  list数据中map的键名称
         * to   要显示的视图列在“form”中的参数,即绑定视图中的ID名称
         */
        // 给ListView设置数据适配器
        SimpleAdapter adapter = new SimpleAdapter(this,getDate(),R.layout.item,
                new String[]{"pic","name"},new int[]{R.id.pic,R.id.name} );
        listView.setAdapter(adapter);
        // 设置ListView的元素被选中时的事件处理监听器
        listView.setOnItemClickListener(this);
    }

    @Override
    public void onItemClick(AdapterView<?> parent, View view, int position, long id) {
        // 获取点击ListView item中的内容信息
        String text = listView.getItemAtPosition (position)+" ";
        Log.i ("TAG","position ="+position+"=text="+text);

    }

    public List<Map<String,Object>> getDate() {
        for (int i = 0; i < 10; i++) {
            Map<String,Object> map = new HashMap<String,Object> ();
            map.put ("pic",R.drawable.ic_launcher);
            map.put ("name", "Text"+i);
            mListData.add (map);
        }
        return mListData;
    }
}

3,自定义适配器(继承BaseAdapter)

public class MainActivity extends AppCompatActivity implements AdapterView.OnItemClickListener {

    private ListView listView;
    private List<BookBean> mListData;

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate (savedInstanceState);
        setContentView (R.layout.activity_main);
        mListData = new ArrayList<BookBean>();

        listView = (ListView) findViewById (R.id.listview);
        // 给ListView设置数据适配器
        ListAdapter adapter = new ListAdapter(getDate(),this);
        listView.setAdapter(adapter);
        // 设置ListView的元素被选中时的事件处理监听器
        listView.setOnItemClickListener(this);
    }

    @Override
    public void onItemClick(AdapterView<?> parent, View view, int position, long id) {
        // 获取点击ListView item中的内容信息
        String text = listView.getItemAtPosition (position)+" ";
        Log.i ("TAG","position ="+position+"=text="+text);

    }

    public List<BookBean> getDate() {
        for (int i = 0; i < 10; i++) {
            BookBean bean = new BookBean ();
            bean.bookName = "Java"+i;
            bean.bookContext = "Java 开发第一版"+i;
            mListData.add (bean);
        }
        return mListData;
    }
}
 
 
适配器(Adapter):

public class ListAdapter extends BaseAdapter{
    List <BookBean> mList;
    public LayoutInflater minflater;

    public ListAdapter(List<BookBean> mList, Context context) {
        this.mList = mList;
        minflater = LayoutInflater.from (context);
    }

    @Override
    public int getCount() {
        return mList.size ();
    }

    @Override
    public Object getItem(int position) {
        return mList.get(position);
    }

    @Override
    public long getItemId(int position) {
        return position;
    }

    @Override
    public View getView(int position, View convertView, ViewGroup parent) {
        ViewHolder viewHolder;
        if (convertView== null){
            viewHolder = new ViewHolder ();
            convertView = minflater.inflate (R.layout.item,null);
            viewHolder.imageView = (ImageView) convertView.findViewById (R.id.pic);
            viewHolder.bookNmae = (TextView) convertView.findViewById (R.id.bookname);
            viewHolder.bookContext = (TextView) convertView.findViewById (R.id.bookcontext);
            convertView.setTag (viewHolder);
        }else{
            viewHolder = (ViewHolder) convertView.getTag ();
        }
        viewHolder.imageView.setImageResource (R.drawable.ic_launcher);
        viewHolder.bookNmae.setText (mList.get (position).bookName);
        viewHolder.bookContext.setText (mList.get (position).bookContext);

        return convertView;
    }

    class ViewHolder{
        public ImageView imageView;
        public TextView bookNmae;
        public TextView bookContext;
    }
}

Bean对象:

public class BookBean {

    public String bookName;
    public String bookContext;
}




猜你喜欢

转载自blog.csdn.net/zhu522959034/article/details/65446580