android_ListView

Day1

今天看了listView,并对简单的列表选择进行了实现。

首先明确一下适配器的概念,就我个人理解而言,就是连接layout.xml和Activity.java的桥梁。在xml中定义一个listView,在Java中创建一个数组,数组用于创建adapter(这里adapter也可以理解成数据源的样子),然后add到listView上。

按适配器分,listView可以分为ArrayAdapter,SimpleAdapter,SimpleCusorAdapter和自定义Adapter。

根据我学习的书本,今天实现了ArrayAdapter和自定义Adapter。

ArrayAdapter:构成listView数据项的就是简单的数组

在xml:简单的拖曳textView和listView,给他们定义id.

在java:创建数组,创建适配器(调用数组),给listView添加适配器。

          为了使效果更加明显,给listView添加OnItemClick方法,实现OnCLick方法,获取到它的ToString值,赋给TextView,这样就能很直观的体现出来了。

其中listView又可以实现 单选和多选 两种模式,改一下Adapter的layout和listView的choiceMode就可以.

按照书上的跑了一遍例子,代码如下:

 1 public class ListView1 extends ActionBarActivity {
 2 
 3     private TextView textView;
 4     private TextView txtContent;
 5     private ListView listView;
 6     private Button button;
 7     int count =0;
 8     String [] Balls = new String[]{"basketball","soccer","baseball","篮球","足球","排球"};
 9 
10     @Override
11     protected void onCreate(Bundle savedInstanceState) {
12         super.onCreate(savedInstanceState);
13         setContentView(R.layout.activity_list_view1);
14         txtContent =(TextView)findViewById(R.id.textView);
15         textView =(TextView)findViewById(R.id.textView2);
16         listView = (ListView)findViewById(R.id.listView);
17         button = (Button)findViewById(R.id.button);
18        //单选
19        // ArrayAdapter<String>adapterBalls = new ArrayAdapter<String>(this,android.R.layout.simple_list_item_1,Balls);
20        //多选
21         ArrayAdapter<String>adapterBalls = new ArrayAdapter<String>(this,android.R.layout.simple_list_item_multiple_choice,Balls);
22         listView.setAdapter(adapterBalls);
23         listView.setChoiceMode(ListView.CHOICE_MODE_MULTIPLE);//可多选
24         count = adapterBalls.getCount();
25         button.setOnClickListener(btnListener);
26 
27         listView.setOnItemClickListener(lstListener);
28         listView.setTextFilterEnabled(true);
29         listView.setSelector(R.drawable.tar);
30         listView.setSelection(3);
31     }
32     private ListView.OnItemClickListener lstListener = new ListView.OnItemClickListener(){
33         public void onItemClick(AdapterView<?>parent,View v,int position,long id){
34          //单选
35          // String sel = parent.getItemAtPosition(position).toString();
36          // textView.setText("我最喜欢的球类运动:"+sel);
37             if(listView.isItemChecked(position)){
38                 String sel = parent.getItemAtPosition(position).toString();//parents??? position是指选项的位置。
39                 txtContent.setText("目前选择:"+sel);
40             }else{
41                 txtContent.setText("目前选择:");
42             }
43         }
44     };
45 
46     private Button.OnClickListener btnListener = new Button.OnClickListener(){
47         public void onClick(View v){
48             String selAll = "";
49             for(int i=0;i<count;i++){
50                 if(listView.isItemChecked(i)) {//已复选
51                     selAll +=Balls[i];
52                 }
53             }
54             textView.setText(selAll);
55         }
56     };
57 }

 

 

自定义Adapter:构成listView数据项的是由自己定义的,类似结构体。

就是比如你的listView中的每一个选项都需要一张图片,一行简介和一个按钮。

那你最好自己自定义一个layout,里面有你想设计成的item的样式,再在Java中重写适配器,因为要达到一种效果就是new 适配器的时候,要把item里面的所有元素都初始化好。

在xml:一个是本来就有的xml,里面就有textView和ListView,另一个额外的xml是你自己设定的item的样式。

在java:按照普通的listView来实现,然后在onCreat()方法下面新建一个内部类myAdapter,继承自BaseAdapter,主要实现他的getView功能就OK。

 1 package com.example.administrator.myapplication;
 2 
 3 import android.content.Context;
 4 import android.support.v7.app.ActionBarActivity;
 5 import android.os.Bundle;
 6 import android.view.LayoutInflater;
 7 import android.view.Menu;
 8 import android.view.MenuItem;
 9 import android.view.View;
10 import android.view.ViewGroup;
11 import android.widget.BaseAdapter;
12 import android.widget.ImageView;
13 import android.widget.ListView;
14 import android.widget.TextView;
15 /*
16 自定义list列表
17 自定义list的item的布局 my_adaoter.xml
18 自定义适配器MyAdapter 内部类
19  */
20 
21 public class ListView2 extends ActionBarActivity {
22 
23     private TextView txtName;
24     private ListView listName;
25     int [] resIds = new int[]{R.drawable.tar,R.drawable.serach};
26     String []Balls = new String[]{"星星","搜索"};
27     String []engNames = new String[]{"star","search"};
28     MyAdapter adapter = null;
29     @Override
30     protected void onCreate(Bundle savedInstanceState) {
31         super.onCreate(savedInstanceState);
32         setContentView(R.layout.activity_list_view2);
33         txtName = (TextView)findViewById(R.id.textView3);
34         listName = (ListView)findViewById(R.id.listView2);
35         adapter=new MyAdapter(this);
36         listName.setAdapter(adapter);
37     }
38 
39     public class MyAdapter extends BaseAdapter {
40         private LayoutInflater myInflater;
41         public MyAdapter(Context c){
42             myInflater=LayoutInflater.from(c);
43         }
44         public int getCount(){
45             return Balls.length;
46         }
47         public Object getItem(int position){
48             return Balls[position];
49         }
50         public long getItemId(int position){
51             return position;
52         }
53         public View getView(int position,View convertView,ViewGroup parent){
54             convertView=myInflater.inflate(R.layout.activity_my_adapter,null);
55             //获取myadapter.xml中的组件
56             ImageView imgLogo = (ImageView)convertView.findViewById(R.id.imageView);
57             TextView txtName = (TextView)convertView.findViewById(R.id.txtName);
58             TextView txtEngName = (TextView)convertView.findViewById(R.id.txtEngName);
59             //设置组件内容
60             imgLogo.setImageResource(resIds[position]);
61             txtName.setText(Balls[position]);
62             txtEngName.setText(engNames[position]);
63 
64             return convertView;
65         }
66     }
67 
68 }

 

THE  ENDDING......

1.敲代码的时候打listView.后面就会出现好多的方法,觉得最好的学习还是要看一下API之类的官方文档,学习掌握更加全面。

2.现在过第一遍的确是理解了,但这个东西吧,特别容易忘,几天不上手就容易记忆模糊,需要在记忆方面下点苦功。多尝试不借助外力,徒手实现代码。

3.关于SimpleAdapter,SimpleCusorAdapter,内容和思想也和上述的Adapter也大致相同吧,下次补上。

posted @ 2016-04-06 00:13  一路向北280  阅读(214)  评论(0编辑  收藏  举报