原创内容,转载请注明原文网址:http://homeqin.cn/a/wenzhangboke/jishutiandi/Android/2019/0828/619.html
【正文】
内容简介:
• 1、根基的XML配置
• 2、ListActivity
• 3、单选和多选模式
• 4、ListView实现图文列表
• 5、ListView革新分页
一、常州手游开发根基的 XML配置:
android:cacheColorHint="#00000000" //配置拖动布景色为透明
android:dividerHeight="30px" //listview item之间的高度(即分格条的高度)
android:divider="@drawable/ic_launcher" //配置listview item之间布景大概说是色彩
android:fadingEdge="vertical" //上边和下边有黑色的暗影,值为none的话就没有暗影
android:drawSelectorOnTop="true" 点击某笔纪录不放,色彩会在纪录的前面,成为前景色,纪录上的文字被遮住,以是点击文字不放,文字就看不到(默认为false)
android:scrollbars="horizontal|none" //惟有值为horizontal|vertical的时候(默认也是这个值),才会表现转动条,而且会自动影藏和表现
android:fastScrollEnabled="true" //疾速转动结果,配置这个属性,在疾速转动的时候附近会出现一个小方块,进行疾速转动,自动潜藏和表现(要是没有出现,是由于ListView item数量不够多)
android:listSelector="@color/pink" //istViewl item选中时的色彩
android:entries="@array/citys" //配置列表添补的内容
在ListView中加载内陆数据,有两种方法,下面举例申明:(固然了,在这以前我们必要在结构文件activity_main.xml中增加一个ListView控件)
【方法一】:在xml文件中增加静态数据的方法:
在常州游戏开发培训res/values/string.xml文件中, 增加一组静态数据,作为列表中将要添补的内容,代码如下
复制代码
1 <?xml version="1.0" encoding="utf-8"?>
2 <resources>
3 <string name="app_name">smyh005_ListView</string>
4 <string name="action_settings">Settings</string>
5 <string name="hello_world">Hello world!</string>
6
7 <string-array name="names">
8 <item >性命诚恳</item>
9 <item >性命诚恳</item>
10 <item >性命诚恳</item>
11 <item >性命诚恳</item>
12 <item >性命诚恳</item>
13 <item >性命诚恳</item>
14 <item >性命诚恳</item>
15 <item >性命诚恳</item>
16 <item >性命诚恳</item>
17 </string-array>
18
19 </resources>
复制代码
紧接着,在结构文件的ListView控件中,增加如下属性:
android:entries="@array/names"
而后配置一下ListView的其余属性。如许,运转后,便表现一个简单的列表了。
【方法二】在java代码中来增加数据:
复制代码
1 public class MainActivity extends Activity {
2 private ListView listView;
3 @Override
4 protected void onCreate(Bundle savedInstanceState) {
5 super.onCreate(savedInstanceState);
6 setContentView(R.layout.activity_main);
7 listView = (ListView) findViewById(R.id.listView1);
8 String[] names = { "性命诚恳", "性命诚恳", "性命诚恳", "性命诚恳", "性命诚恳", "性命诚恳" };
9 //第二个参数,也能够新建一个结构文件,在这个结构文件的TextView中间配置其余属性。由于每个Item本身即是一个TextView
10 ArrayAdapter<String> adapter = new ArrayAdapter<String>(this,
11 android.R.layout.simple_list_item_1, names);
12 listView.setAdapter(adapter);
13 }
复制代码
【手机App外包事件处分】
事件处分的监听器为:OnItemClickListener。
方法举比方下:(将目前点击的那个item的文本以吐司的方法表现出来)
复制代码
1 listView1.setOnItemClickListener(new OnItemClickListener(){
2
3 //ListView的列表项的单击事件
4 @Override
5 //第一个参数:指的是这个ListView;第二个参数:目前单击的那个item
6 public void onItemClick(AdapterView<?> parent, View view, int position,
7 long id) {
8 System.out.println("parent="+parent.getClass());
9 System.out.println("view="+view.getClass());
10
11 //既然目前点击的那个item是一个TextView,那我们可以将其强迫转型为TextView范例,而后通过getText()方法取出它的内容,紧接着以吐司的方法表现出来
12 TextView tv = (TextView)view;
13 Toast.makeText(MainActivity.this,tv.getText(),Toast.LENGTH_SHORT).show();//方法: Toast makeText (Context context, CharSequence text, int duration)
14
15 System.out.println("position="+position);
16 System.out.println("id="+id);
17
18 }
19
20 });
复制代码
上头的第12、13行代码也能够替代成下面的这行代码:(由于通过adapter的getItem方法也能够获取对应Item,回笼值范例是我们以前定义好的String范例)
Toast.makeText(MainAcivity.this, adapter.getItem(position), Toast.LENGTH_SHORT).show;
运转结果如下:
二、ListActivity
(1)要是程序的窗口仅仅只必要表现一个列表,则可以让这个activity干脆秉承ListActivity来实现,此时曾经包含了一个ListView组件,不消再从新写结构文件了。
代码举比方下:
复制代码
1 package com.smyhvae.smyh005listview;
2 import android.app.ListActivity;
3 import android.os.Bundle;
4 import android.widget.ArrayAdapter;
5 public class SecondActivity extends ListActivity{
6 @Override
7 protected void onCreate(Bundle savedInstanceState) {
8 // TODO Auto-generated method stub
9 super.onCreate(savedInstanceState);
10 //通过代码配置ListView中的内容
11 String[] names = {"性命诚恳","性命诚恳","性命诚恳","性命诚恳","性命诚恳","性命诚恳"};
12 //通过ArrayAdaper将names的内容添补进入
13 //方法:public ArrayAdapter (Context context, int resource, int textViewResourceId),第二个参数为结构
14 ArrayAdapter<String> adapter = new ArrayAdapter<String>(this, android.R.layout.simple_list_item_1, names);
15 // adpter和ListView进行绑定
16 setListAdapter(adapter);
17
18 //注:App开发培训通过getListView()可以取出这个ListView
19 }
20 }
复制代码
运转后,也能表现出一个ListView。
(2)事件处分
事件处分的方法为:onListItemClick();
ListActiviy这个类中曾经包含了事件处分的监听器,以是我们只必要复写此中的onListItemClick()即可:
1 //重写ListActivity中的onListItemClick方法来实现列表项的单击事件
2 @Override
3 protected void onListItemClick(ListView l, View v, int position, long id) {
4 // TODO Auto-generated method stub
5 super.onListItemClick(l, v, position, id);
6 }
(3)ListActivity的结构默认是由一个单纯的在屏幕中间的全屏幕的列表,用setcontentview()在在oncreate()配置您本人的自定义屏幕结构视图结构,必需包含一个列表视图的工具ID:"@android:id/list“
(4)自定义视图可以包含任何范例,表现另一个视图工具列表视图是空的,必需包含一个视图工具的ID:android:id/empty。
三、单选和多选模式:
单选模式:
1 String[] cities = { "北京", "成都", "重庆", "武汉" };
2 ArrayAdapter<String> adapter = new ArrayAdapter<String>(this,
3 android.R.layout.simple_list_item_single_choice, cities);
4 listView.setChoiceMode(ListView.CHOICE_MODE_SINGLE);
多选模式:
1 String[] cities = { "北京", "成都", "重庆", "武汉" };
2 ArrayAdapter<String> adapter = new ArrayAdapter<String>(this,
3 android.R.layout.simple_list_item_multiple_choice, cities);
4 listView.setChoiceMode(ListView.CHOICE_MODE_MULTIPLE);
五、ListView实现图文列表:
1、应用SimpleAdapter确立复杂的列表项:
应用到的方法是:
android.widget.SimpleAdapter.SimpleAdapter(Context context, List<? extends Map<String, ?>> data, int resource, String[] from, int[] to)
第2个参数data:每个Item即是一个Map,多个Map放在一个List中间。这个List是一个鸠合工具。,每一个map中应该包含所有在from参数中指定的键;(比方,data里放入图片和文字)
第3个参数resource:一个自定义列表项的结构文件的资源ID。结构文件将起码应包含在to中定义了的ID。(通俗来说,即是先定义一个Item的模板)
第4个参数from:一个将被增加到Map映射上的键名
第5个参数to:将绑定命据的视图的ID,跟from参数对应,这些应该全是TextView。
常州网站开发培训举例申明,完备版代码如下:
结构文件activity3.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"
android:orientation="vertical" >
<ListView
android:id="@+id/listView1"
android:layout_width="match_parent"
android:layout_height="wrap_content" >
</ListView>
</LinearLayout>
复制代码
下面新建一个结构文件activity_main_item.xml,作为一个Item的模板:
复制代码
<?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="wrap_content"
android:orientation="horizontal"
android:gravity="center" >
<ImageView
android:id="@+id/imageView1"
android:layout_width="40dp"
android:layout_height="40dp"
android:src="@drawable/vae" />
<TextView
android:id="@+id/textView1"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:text="TextView"
android:textSize="20sp" />
</LinearLayout>
复制代码
这个结构文件展现的结果如下:
495033ba-d71d-40ba-a783-0d6cac53fdde
而后,MainActivity.java的代码如下:
复制代码
1 import java.util.ArrayList;
2 import java.util.HashMap;
3 import java.util.List;
4 import java.util.Map;
5 import android.app.Activity;
6 import android.os.Bundle;
7 import android.view.Menu;
8 import android.widget.ListView;
9 import android.widget.SimpleAdapter;
10 public class MainActivity extends Activity {
11 private ListView listView;
12 @Override
13 protected void onCreate(Bundle savedInstanceState) {
14 super.onCreate(savedInstanceState);
15 setContentView(R.layout.activity_main);
16 listView = (ListView) findViewById(R.id.listView1);
17 //步骤1 一个列表项的内容,即是一个item
18 Map<String, Object> item1 = new HashMap<String, Object>();
19 item1.put("image", R.drawable.vae);
20 item1.put("name", "许嵩");
21 //步骤1:一个列表项的内容,即是一个item,即一个Map
22 Map<String, Object> item2 = new HashMap<String, Object>();
23 item2.put("image", R.drawable.smyh);
24 item2.put("name", "性命诚恳");
25
26 //步骤2:把这些Map放到List中间
27 List<Map<String, Object>> data = new ArrayList<Map<String, Object>>();
28 data.add(item1);
29 data.add(item2);
30
31 //留意:第四个参数和第五个参数要逐一对应
32 SimpleAdapter simpleAdapter = new SimpleAdapter(this, data,
33 R.layout.activity_main_item, new String[] { "image", "name" },
34 new int[] { R.id.imageView1, R.id.textView1 });
35
36 //步骤3:将List中的内容添补到listView里面去
37 listView.setAdapter(simpleAdapter);
38 }
39 @Override
40 public boolean onCreateOptionsMenu(Menu menu) {
41 // Inflate the menu; this adds items to the action bar if it is present.
42 getMenuInflater().inflate(R.menu.main, menu);
43 return true;
44 }
45 }
复制代码
运转后,结果如下:
要是item对照多的话,可以用for轮回来做
2、自定义适配器BaseAdapter实现更天真的列表:【紧张】
以前应用SimpleAdapter,它的范围性在于,SimpleAdapter曾经将里面的结构(即每个item)封装好了,而后根据这种花样叠加起来,无法进行分外的处分。以是,这时候可以应用BaseAdapter实现更天真的列表。
(1)方法:现实上,即是本人写一个MyAdapter类,让它秉承BaseAdapter。必要复写该类的四个方法:
public int getCount() :通过 adapter报告 非常要在 listView(view) 中表现 几许条款 的数据。
public Object getItem(int position)
public long getItemId(int position)
public View getView(int position, View convertView, ViewGroup parent):用来 表现 【每个条款时】 会被挪用到的 方法。
非常紧张的是 getCount() 和 getView()。
(2)ListView 的优化:
重复应用convertView
应用ViewHolder进步在容器中查找组件的服从
完备版代码如下:
activity_main.xml:
复制代码
1 <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
2 xmlns:tools="http://schemas.android.com/tools"
3 android:layout_width="match_parent"
4 android:layout_height="match_parent"
5 android:paddingBottom="@dimen/activity_vertical_margin"
6 android:paddingLeft="@dimen/activity_horizontal_margin"
7 android:paddingRight="@dimen/activity_horizontal_margin"
8 android:paddingTop="@dimen/activity_vertical_margin"
9 tools:context=".MainActivity" >
10 <ListView
11 android:id="@+id/listView1"
12 android:layout_width="match_parent"
13 android:layout_height="match_parent" >
14 </ListView>
15 </LinearLayout>
复制代码
注:为了优化,第13行的代码必然要写match_parent,而不是wrap_content,注释略。
activity_main_item.xml:
复制代码
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="wrap_content"
5 android:orientation="horizontal"
6 android:gravity="center" >
7
8 <ImageView
9 android:id="@+id/imageView1"
10 android:layout_width="81dp"
11 android:layout_height="81dp"
12 android:src="@drawable/vae" />
13 <TextView
14 android:id="@+id/textView1"
15 android:layout_width="match_parent"
16 android:layout_height="wrap_content"
17 android:text="TextView" />
18 </LinearLayout>
复制代码
Mainactivity.java:
复制代码
1 package com.smyhvae.smyh005listview4;
2 import android.app.Activity;
3 import android.os.Bundle;
4 import android.view.Menu;
5 import android.view.View;
6 import android.view.ViewGroup;
7 import android.widget.BaseAdapter;
8 import android.widget.ImageView;
9 import android.widget.ListView;
10 import android.widget.TextView;
11 public class MainActivity extends Activity {
12 private ListView listView;
13 @Override
14 protected void onCreate(Bundle savedInstanceState) {
15 super.onCreate(savedInstanceState);
16 setContentView(R.layout.activity_main);
17 listView = (ListView) findViewById(R.id.listView1);
18 listView.setAdapter(new MyAdapter());
19 }
20 // 定义的数据
21 private int[] images = { R.drawable.vae, R.drawable.vae, R.drawable.vae,
22 R.drawable.vae, R.drawable.vae, R.drawable.vae, R.drawable.vae,
23 R.drawable.vae, R.drawable.vae, R.drawable.vae, R.drawable.vae,
24 R.drawable.vae };
25 private String[] names = { "性命01号", "性命02号", "性命03号", "性命04号", "性命05号",
26 "性命06号", "性命07号", "性命08号", "性命09号", "性命10号", "性命11号", "性命12号" };
27
28 //自定义适配器
29 class MyAdapter extends BaseAdapter{
30 @Override
31 public int getCount() {
32 // TODO Auto-generated method stub
33 return names.length;
34 }
35 @Override
36 public Object getItem(int position) {
37 // TODO Auto-generated method stub
38 return names[position];
39 }
40 @Override
41 public long getItemId(int position) {
42 // TODO Auto-generated method stub
43 return position;
44 }
45 @Override
46 public View getView(int position, View convertView, ViewGroup parent) {
47 // TODO Auto-generated method stub
48 // System.out.println("position=" + position);
49 // System.out.println(convertView);
50 // System.out.println("------------------------");
51 ViewHolder vh = new ViewHolder();
52 //通过下面的条件校验语句,来轮回行使。要是convertView = null ,表示屏幕上没有可以被重复行使的工具。
53 if(convertView==null){
54 //建立View
55 convertView = getLayoutInflater().inflate(R.layout.activity_main_item, null);
56 vh.iv = (ImageView) convertView.findViewById(R.id.imageView1);
57 vh.tv = (TextView) convertView.findViewById(R.id.textView1);
58 convertView.setTag(vh);
59 }else{
60 vh = (ViewHolder)convertView.getTag();
61 }
62 vh.iv.setImageResource(images[position]);
63 vh.tv.setText(names[position]);
64 return convertView;
65 }
66
67 }
68
69 static class ViewHolder{
70 ImageView iv;
71 TextView tv;
72 }
73 @Override
74 public boolean onCreateOptionsMenu(Menu menu) {
75 // Inflate the menu; this adds items to the action bar if it is present.
76 getMenuInflater().inflate(R.menu.main, menu);
77 return true;
78 }
79 }
复制代码
运转结果如下:
五、ListView革新分页
这个历程说来话长,具体参考本人另外一篇博客:
Android UI组件----自定义ListView实现动静革新
上篇:上一篇:android_button onclick点击的5种写法
下篇:下一篇:ANDROID-GSON解析JSON(JSON工具/JSON数组)