Android学习笔记⑦——UI组件的学习AdapterView相关1

AdapterView是一个非常重要的组件之一,他非常灵活,所以得好好学。。。AdapterView本身是一个抽象类,派生出来的子类用法也十分相似,只是界面有一定的区别,因此本节把他们归为一类

AdapterView的特性有:AdapterView 继承了ViewGroup,即它的本质是一个容器 、AdapterView可以包括多个列表项,并且将他们合适的显示、AdapterView与适配器Adapter是有着千丝万缕的关系的,一般都是AdapterView调用setAdapter()方法来填充。

具体的 继承图如下:图片的来源(http://blog.csdn.net/yongyu_it/article/details/44096953)

 

ListView配合简单数组实例

下面就让我们先来学习ListView控件的相关用法:

不用Adapter接口来实现内容的填充,直接在values - strings 中添加一个所需要的数组,具体代码如下:

 1 <?xml version="1.0" encoding="utf-8"?>
 2 <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
 3     android:orientation="vertical" android:layout_width="match_parent"
 4     android:layout_height="match_parent">
 5 
 6     <ListView
 7         android:layout_width="wrap_content"
 8         android:layout_height="wrap_content"
 9         android:entries="@array/books"
10         android:divider="@color/red"
11         android:dividerHeight="4px"
12         ></ListView>
13 </LinearLayout>

strings中的数组代码:

<resources>
    <string name="app_name">AdapterView组件测试 </string>
    <string-array name="books">
        <item>Android基础1</item>
        <item>Android基础2</item>
        <item>Android基础3</item>
        <item>Android基础4</item>
        <item>Android基础5</item>
    </string-array>
</resources>

运行的截图如下:

这是一个简单的运用,其中的 android:entries="@array/books" 是用来得到该列表的数组资源的,使用数组创建ListView十分简单,之所以简单,是因为这样的方法很难定制其他的,比如更改列表项的字体、颜色、外观,所以如果想更改就要把ListView作为AdapterView使用,通过Adapter来实现。

Adapter相关

Adapter本身是一个接口,也派生出来ListAdapter和SpinnerAdapter两个子接口具体的图如下所示:( 图片来自百度图库 )

从上面的继承图可以看出 还是蛮清晰的,几乎所有的Adapter都继承BaseAdapter。那么多,就学习一些常用的吧。

Adapter常用的实现类有:

ArrayAdapter :简单、易用,通常用于数组或者List集合的多个值包装成多个列表项

SimpleAdapter: 不简单、强大的Adapter,可用于将List集合的多个对象包装成多个列表项

SimpleCursorAdapter:与SimpleAdapter相似、但只包装Cursor提供的数据

BaseAdapter:非常强大、用于扩展,自定义各种需要的列表项

 

ListView配合ArrayAdapter实例

布局内的代码,两个ListView:

 1 <?xml version="1.0" encoding="utf-8"?>
 2 <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
 3     android:layout_width="match_parent"
 4     android:layout_height="match_parent"
 5     android:orientation="vertical">
 6 
 7 
 8     <ListView
 9         android:id="@+id/list1"
10         android:layout_width="match_parent"
11         android:layout_height="wrap_content"
12         android:divider="@color/green"
13         android:dividerHeight="3px">
14     </ListView>
15 
16     <ListView
17         android:id="@+id/list2"
18         android:layout_width="match_parent"
19         android:layout_height="wrap_content"
20         android:divider="@color/red"
21         android:dividerHeight="3px">
22     </ListView>
23 </LinearLayout>

java代码:

 1 package com.doliao.helloworld;
 2 
 3 import android.app.Activity;
 4 import android.os.Bundle;
 5 import android.widget.ArrayAdapter;
 6 import android.widget.ListView;
 7 
 8 /**
 9  * Created by Administrator on 2016/10/10 0010.
10  */
11 
12 public class AdapterActivity extends Activity {
13 
14 
15     ListView listView1, listView2;
16 
17     @Override
18     protected void onCreate(Bundle savedInstanceState) {
19         super.onCreate(savedInstanceState);
20         setContentView(R.layout.activity_adapterview2);
21 
22         listView1 = (ListView) findViewById(R.id.list1);
23         listView2 = (ListView) findViewById(R.id.list2);
24 
25         String[] arrayList1 = {"第一个list", "第一个list", "第一个list"};
26         String[] arrayList2 = {"第二个list", "第二个list", "第二个list"};
27         ArrayAdapter<String> adapter1 = new ArrayAdapter<String>(this, R.layout.array1, arrayList1);
28         ArrayAdapter<String> adapter2 = new ArrayAdapter<String>(this, R.layout.array2, arrayList2);
29 
30         listView1.setAdapter(adapter1);
31         listView2.setAdapter(adapter2);
32     }
33 }

 

数组的布局:

1 <?xml version="1.0" encoding="utf-8"?>
2 <TextView xmlns:android="http://schemas.android.com/apk/res/android"
3     android:layout_width="match_parent"
4     android:layout_height="match_parent"
5     android:orientation="vertical"
6     android:textColor="#000"
7     android:textSize="10pt"
8     />

运行截图:

ArrayAdapter与ListView结合 跟上一个 ListView与原生的数组结合相比较,一个可以改变字体颜色大小,一个不可改变,那如果想要跟QQ的好友列表类似,那么就要学SimpleAdapter,下面就是学习SimplerAdapter

 

SimpleAdapter配合ListView实例

 布局代码:

 1 <?xml version="1.0" encoding="utf-8"?>
 2 <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
 3     android:orientation="vertical" android:layout_width="match_parent"
 4     android:layout_height="match_parent">
 5 
 6     <ListView
 7         android:id="@+id/list3"
 8         android:layout_width="match_parent"
 9         android:layout_height="wrap_content">
10     </ListView>
11 </LinearLayout>

设置列表格式的 布局代码:

 1 <?xml version="1.0" encoding="utf-8"?>
 2 <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
 3     android:layout_width="match_parent"
 4     android:layout_height="match_parent"
 5     android:orientation="horizontal">
 6 
 7     <ImageView
 8         android:id="@+id/image_icon"
 9         android:layout_width="100px"
10         android:layout_height="100px" />
11 
12     <LinearLayout
13         android:layout_width="wrap_content"
14         android:layout_height="wrap_content"
15         android:orientation="vertical">
16 
17         <TextView
18             android:id="@+id/text_name"
19             android:layout_width="wrap_content"
20             android:layout_height="wrap_content"
21             android:textSize="10pt"
22             />
23 
24         <TextView
25             android:id="@+id/text_state"
26             android:layout_width="wrap_content"
27             android:layout_height="wrap_content"
28             android:textSize="10pt"
29              />
30     </LinearLayout>
31 </LinearLayout>

java界面的代码:

 1 package com.doliao.helloworld;
 2 
 3 import android.app.Activity;
 4 import android.os.Bundle;
 5 import android.widget.ListView;
 6 import android.widget.SimpleAdapter;
 7 
 8 import java.util.ArrayList;
 9 import java.util.HashMap;
10 import java.util.List;
11 import java.util.Map;
12 
13 /**
14  * Created by Administrator on 2016/10/10 0010.
15  */
16 
17 public class SimpleAdapterActivity extends Activity {
18 
19     ListView listView;
20 
21     @Override
22     protected void onCreate(Bundle savedInstanceState) {
23         super.onCreate(savedInstanceState);
24         setContentView(R.layout.activity_adapterview3);
25         listView = (ListView) findViewById(R.id.list3);
26 
27         int[] imageIds = new int[]{R.drawable.pic1, R.drawable.pic2, R.drawable.pic3, R.drawable.pic4, R.drawable.pic5};
28         String[] names = new String[]{"射箭", "网球", "足球", "滑雪", "登山"};
29         String[] states = new String[]{"百发百不中的射手", "一直捡球的网球手", "护国足球", "滑雪滑雪滑雪滑雪", "登高登高登高赏菊"};
30 
31         List<Map<String, Object>> listItems = new ArrayList<Map<String, Object>>();
32         for (int i = 0; i < names.length; i++) {
33             Map<String, Object> map = new HashMap<String, Object>();
34             map.put("pic", imageIds[i]);
35             map.put("name", names[i]);
36             map.put("state", states[i]);
37             listItems.add(map);
38         }
39         SimpleAdapter simpleAdapter = new SimpleAdapter(this, listItems, R.layout.simpleadapter, new String[]{"pic", "name", "state"},
40                 new int[]{R.id.image_icon, R.id.text_name, R.id.text_state});
41 
42         listView.setAdapter(simpleAdapter);
43     }
44 }

运行截图如下:

以上就是自定义内容,使的列表内容变得丰富,主要用到的是SimpleAdapter,SimpleAdapter有五个参数,会用这五个参数是十分关键的!

第一个参数:Context 上下文参数

第二个参数:参照源码是  List<? extends Map<String, ?>>  这种类型的集合对象

第三个参数:页面布局的一个序列号 一般是R.layout.xxxx 中的xxxx

第四个参数:这个参数是一个String[]类型的参数,取决于Map<String,?> 对象的中的哪些key对应的value来生成列表项

第五个参数:这个参数是一个int[]类型的参数,取决于你第三个参数界面中的对应组件的id

 

BaseAdapter 与ListView 实例

布局代码:

 1 <?xml version="1.0" encoding="utf-8"?>
 2 <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
 3     android:layout_width="match_parent"
 4     android:layout_height="match_parent"
 5     android:orientation="vertical">
 6 
 7     <ListView
 8         android:id="@+id/list4"
 9         android:layout_width="match_parent"
10         android:layout_height="wrap_content">
11 
12     </ListView>
13 </LinearLayout>

java代码:

 1 package com.doliao.helloworld;
 2 
 3 import android.app.Activity;
 4 import android.graphics.Color;
 5 import android.os.Bundle;
 6 import android.view.View;
 7 import android.view.ViewGroup;
 8 import android.widget.BaseAdapter;
 9 import android.widget.ImageView;
10 import android.widget.LinearLayout;
11 import android.widget.ListView;
12 import android.widget.TextView;
13 
14 /**
15  * Created by Administrator on 2016/10/10 0010.
16  */
17 
18 public class BaseAdapterActivity extends Activity {
19 
20     ListView listView;
21 
22     @Override
23     protected void onCreate(Bundle savedInstanceState) {
24         super.onCreate(savedInstanceState);
25         setContentView(R.layout.activity_adapterview4);
26         listView = (ListView) findViewById(R.id.list4);
27 
28         BaseAdapter baseAdapter = new BaseAdapter() {
29             @Override
30             public int getCount() {
31                 return 30;
32             }
33 
34             @Override
35             public Object getItem(int position) {
36                 return null;
37             }
38 
39             @Override
40             public long getItemId(int position) {
41                 return position;
42             }
43 
44             @Override
45             public View getView(int position, View convertView, ViewGroup parent) {
46 
47                 LinearLayout linear = new LinearLayout(BaseAdapterActivity.this);
48                 linear.setOrientation(0);
49                 ImageView imageView = new ImageView(BaseAdapterActivity.this);
50                 imageView.setImageResource(R.drawable.yes);
51                 TextView textView = new TextView(BaseAdapterActivity.this);
52                 textView.setText("第" + (position + 1) + "个列表项");
53                 textView.setTextSize(20);
54                 textView.setTextColor(Color.RED);
55                 linear.addView(imageView);
56                 linear.addView(textView);
57                 return linear;
58             }
59         };
60 
61         listView.setAdapter(baseAdapter);
62     }
63 }

运行截图:

当创建一个BaseAdapter的时候,该对象要重写4个方法:

getCount() 该方法的返回值会控制Adapter将会包含多少个列表项,

getItem(int position) 返回值决定第position处的列表项的内容

getItemId(id position) 返回值觉得第position出的列表项的ID

getView(int position,View convertView ,View Group parent)  这个方法不是非常的明白,于是百度了下 见  http://blog.csdn.net/pkxiuluo01/article/details/7380974 这边比较详细的介绍了参数的用途。

 

SimpleCursorAdapter

 是与数据库中的数据相关的,暂时先不学。。。

 

AutoCompleteTextView(自动提示框)

AutoCompleteTextView 是由EditView派生出来的一个子类,他的作用跟EditView相似,唯一不同的就是AutoCompleteTextView 组件,当你输入一些内容时,会根据内容给出一些提示,当然这些提示是你要事先设置好的, 设置的方法就是设置一个Adapter了,Adapter封装了所需要的提示文本,这样以来就OK了。当然AutoCompleteTextView 也蛮厉害的他也生了一个儿子MultiAutoCompleteTextView ,它的功能就更加强大了——允许输入多个提示项,多个提示项目之间用逗号隔开,当然使用的方法是一样的,都是通过Adapter。

下面就来个实例,布局代码:

 

 1 <?xml version="1.0" encoding="utf-8"?>
 2 <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
 3 xmlns:tools="http://schemas.android.com/tools"
 4 android:id="@+id/activity_main"
 5 android:layout_width="match_parent"
 6 android:layout_height="match_parent"
 7 tools:context="com.doliao.helloworld.MainActivity">
 8 
 9 <AutoCompleteTextView
10     android:id="@+id/autotext"
11     android:layout_width="match_parent"
12     android:layout_height="wrap_content" />
13 </LinearLayout>

 

java代码:

 

 1 package com.doliao.helloworld;
 2 
 3 import android.support.v7.app.AppCompatActivity;
 4 import android.os.Bundle;
 5 import android.widget.ArrayAdapter;
 6 import android.widget.AutoCompleteTextView;
 7 
 8 public class MainActivity extends AppCompatActivity {
 9 
10     AutoCompleteTextView autoCompleteTextView;
11     @Override
12     protected void onCreate(Bundle savedInstanceState) {
13         super.onCreate(savedInstanceState);
14         setContentView(R.layout.activity_main);
15 
16         autoCompleteTextView = (AutoCompleteTextView) findViewById(R.id.autotext);
17 
18         String []array = new String[]{"JAVA","AJAX","XML","Android"};
19 
20         ArrayAdapter<String> arrayAdapter = new ArrayAdapter<String>(this,R.layout.autotext,array);
21 
22         autoCompleteTextView.setAdapter(arrayAdapter);
23     }
24 }

在设置ArrayAdapter的时候,第二个参数的布局代码我就不贴了,前面有的。

运行截图为:

posted @ 2016-10-10 15:12  大园子  阅读(334)  评论(0编辑  收藏  举报