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也大致相同吧,下次补上。

时间: 2024-08-26 10:00:32

android_ListView的相关文章

Android_listview设置每条信息的间距

Android_listview设置每条信息的间距 设置listView的item间距,可以在xml布局文件中的listView下设置xml属性: android:divider="#00000000" android:dividerHeight="18dp" 解释:分隔线透明,高度为18dp.

Android_ListView上拉加载更多(ListView分页功能)

先上效果图 加载完数据 首先定义一个底部正在加载的布局footer_layout.xml <?xml version="1.0" encoding="utf-8"?> <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" android:layout_width="match_parent" android:layou

Android_listview点击失效

listview点击失效,原因可能是item布局中存在Button,该Button夺取了焦点. 解决办法: 1,在xml布局中,为Button添加android:focusable="false" 2,在item布局的根据点添加android:descendantFocusability="blocksDescendants" Defines the relationship between the ViewGroup and its descendants whe

ListView Adapter适配器的布局实例及相关问题

模仿的布局: 模仿的效果图: 实现的方式是:在一个ListView空间里,自定义适配器Adapter,,然后ListView的Item的布局进行改写. 总结: 遇到的问题: (1)不会设置ListView的行间距: 百度知:Android_listview设置每条信息的间距 设置listView的item间距,可以在xml布局文件中的listView下设置xml属性: android:divider="#00000000" android:dividerHeight="18d

silverlight教程 silverlight 数据绑定

以往为了做wtt测试,曾经写过一个sample 的WPF application.对于silverlight的了解,仅限于是web 版的WPF..... 关于silverlight,以前也做过一个sample,但仅仅是拖动一些控件到页面上,无任何其他功能. 今天做的这个silverlight程序,相当于把培训的内容重新复习了一遍,包含两个内容: 1. silverlight 简单数据绑定. 2.silverlight 4 新增的ICommand 接口的使用. 3.silverlight 中简单的

程序员开发书籍汇总

文件类型 文件名称 更新时间 pdf 浅谈ACEGI配制 .pdf 2015/10/9 pdf AJAX In Action.pdf 2015/10/9 pdf Ajax.pdf 2015/10/9 txt AjaxHttpRequest.txt 2015/10/9 pdf AJAXInAction.pdf 2015/10/9 pdf Ajax经典案例开发大全.pdf 2015/10/9 pdf AJAX开发简略(含续一).pdf 2015/10/9 pdf AJAX开发简略.pdf 2015/

怎样使用ListView?

怎样使用ListView? ArrayAdapter的使用 package com.mengmeng.android_listview; import android.os.Bundle; import android.app.Activity; import android.view.Menu; import android.view.View; import android.view.View.OnClickListener; import android.widget.AdapterVie

如何使用ListView?

如何使用ListView? ArrayAdapter的使用 package com.mengmeng.android_listview; import android.os.Bundle; import android.app.Activity; import android.view.Menu; import android.view.View; import android.view.View.OnClickListener; import android.widget.AdapterVie

android 开发-ListView列表显示控件的实现

列表的显示需要三个元素: 1.ListVeiw 用来展示列表的View. 2.适配器 用来把数据映射到ListView上的中介. 3.数据    具体的将被映射的字符串,图片,或者基本组件. 根据列表的适配器类型,列表分为三种,ArrayAdapter,SimpleAdapter和SimpleCursorAdapter UI: 1 <RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"