转载请注明出处:http://blog.csdn.net/qq_32451699/article/details/52422390
一、ListView
实例1.ArrayAdapter做适配器
avtivity_list_test1.xml文件:
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:tools="http://schemas.android.com/tools"
android:layout_width="match_parent"
android:layout_height="match_parent"
tools:context=".ListTestActivity" >
<ListView
android:id="@+id/listView1"
android:layout_width="fill_parent"
android:layout_height="fill_parent"
android:layout_alignParentLeft="true"
android:scrollbars="vertical" >
</ListView>
</RelativeLayout>
ListTest1Activity.java文件:
package com.example.control;
import java.util.ArrayList;
import java.util.List;
import android.os.Bundle;
import android.app.Activity;
import android.view.Menu;
import android.view.View;
import android.widget.AdapterView;
import android.widget.AdapterView.OnItemClickListener;
import android.widget.ArrayAdapter;
import android.widget.ListView;
import android.widget.Toast;
public class ListTestActivity extends Activity {
private ListView listview;
private List<String> list;
private ArrayAdapter<String> aa;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_list_test);
//实例化列表视图
listview = (ListView) findViewById(R.id.listView1);
//listview使用的MVC开发模型,其中listview是视图,Adapter是模型,在java源文件中进行控制
//list为listview提供显示的数据
list=new ArrayList<String>();
list.add("刘德华");
list.add("刘德华");
list.add("刘德华");
list.add("刘德华");
list.add("刘德华");
//设置listview的适配器,使用android系统提供的布局文件android.R.layout.simple_list_item_1
aa=new ArrayAdapter<String>(this, android.R.layout.simple_list_item_1,list);
listview.setAdapter(aa);
//为listview设置列表点击监听器用于监听用户点击Listview中每一项的点击事件
listview.setOnItemClickListener(new OnItemClickListener() {
@Override
public void onItemClick(AdapterView<?> arg0, View arg1, int arg2,
long arg3) {
Toast.makeText(ListTestActivity.this,"别点我",Toast.LENGTH_SHORT).show();
}
});
}
@Override
public boolean onCreateOptionsMenu(Menu menu) {
getMenuInflater().inflate(R.menu.list_test, menu);
return true;
}
}
实例2.SimpleAdapter做适配器
activity_list_test2.xml文件:
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:tools="http://schemas.android.com/tools"
android:layout_width="match_parent"
android:layout_height="match_parent"
tools:context=".ListTest2Activity" >
<ListView
android:id="@+id/listView2"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_alignLeft="@+id/textView2"
android:layout_alignParentTop="true">
</ListView>
</RelativeLayout>
还需要提供一个user.xml布局用于listview每一行里面的1布局效果:
<?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="horizontal">
<ImageView
android:id="@+id/img1"
android:layout_width="60dp"
android:layout_height="80dp" />
<LinearLayout android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:orientation="vertical">
<TextView
android:id="@+id/textView1"
android:layout_width="60dp"
android:layout_height="40dp"
android:text="姓名:"
android:textSize="20dp" />
<TextView
android:id="@+id/textView2"
android:layout_width="60dp"
android:layout_height="40dp"
android:text="电话:"
android:textSize="20dp"/>
</LinearLayout>
<LinearLayout
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:orientation="vertical">
<TextView
android:id="@+id/textView3"
android:layout_width="180dp"
android:layout_height="40dp"
android:text="TextView"
android:textSize="20dp"/>
<TextView
android:id="@+id/textView4"
android:layout_width="180dp"
android:layout_height="40dp"
android:text="TextView"
android:textSize="20dp"/>
</LinearLayout>
</LinearLayout>
ListTest2Activity.java文件:
package com.example.control;
import java.util.ArrayList;
import java.util.HashMap;
import android.os.Bundle;
import android.app.Activity;
import android.view.Menu;
import android.view.View;
import android.widget.AdapterView.OnItemClickListener;
import android.widget.AdapterView;
import android.widget.ListView;
import android.widget.SimpleAdapter;
import android.widget.Toast;
public class ListTest2Activity extends Activity {
private ListView listview2 = null;
@SuppressWarnings("unchecked")
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_list_test2);
//实例化listview2
listview2 = (ListView) findViewById(R.id.listView2);
//ArrayList里面放的是HashMap,HashMap里面放着三个key-value为布局文件中的三个组件提供数据
ArrayList<HashMap<String, Object>> list = new ArrayList<HashMap<String, Object>>();
@SuppressWarnings("rawtypes")
HashMap[] map = new HashMap[10];
//向HashMap中添加key-value键值对
for(int i=0;i<10;i++)
{
map[i]=new HashMap<String, Object>();
map[i].put("image", R.drawable.liudehua);
map[i].put("name", "刘德华");
map[i].put("phone", "1234567");
list.add(map[i]);
}
//SimpleAdapter需要提供五个参数
//第一个参数是上下文对象,就在当前activity中,因此使用this
//第二个参数是list列表用提供listview中将显示那些数据
//第三个参数是布局文件,决定listview每一行的布局样式
//第四个参数是需要显示的value1所对应的key值,是一个字符串数组
//第五个参数是每一项布局中用那些控件来显示数据,注意此处一顺序与第四个参数中的顺序保持一致
SimpleAdapter listadapter = new SimpleAdapter(this, list,
R.layout.user, new String[] { "image", "name", "phone" },
new int[] { R.id.img1, R.id.textView3, R.id.textView4 });
//为listview设置适配器,其实就是为view设置model
listview2.setAdapter(listadapter);
//为listview注册点击项监听器
listview2.setOnItemClickListener(new OnItemClickListener() {
@Override
public void onItemClick(AdapterView<?> arg0, View arg1, int arg2,
long arg3) {
Toast.makeText(ListTest2Activity.this,"你点击了列表"+arg2,Toast.LENGTH_LONG).show();
}
});
}
@Override
public boolean onCreateOptionsMenu(Menu menu) {
getMenuInflater().inflate(R.menu.list_test2, menu);
return true;
}
}
运行效果:
二、ExpandableListView
activity_main.xml文件:
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:tools="http://schemas.android.com/tools"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:orientation="vertical"
tools:context=".MainActivity" >
<LinearLayout
android:layout_width="fill_parent"
android:layout_height="wrap_content"
android:orientation="vertical">
<TextView
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:textSize="12pt"
android:text="第一个可展开列表框:" />
<ExpandableListView
android:id="@+id/elvFirst"
android:background="#444444"
android:layout_width="match_parent"
android:layout_height="wrap_content"/>
</LinearLayout>
<LinearLayout
android:layout_width="fill_parent"
android:layout_height="wrap_content"
android:orientation="vertical">
<TextView
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:textSize="12pt"
android:text="第二个可展开列表框:" />
<ExpandableListView
android:id="@+id/elvSecond"
android:background="#bbbbbb"
android:layout_width="match_parent"
android:layout_height="match_parent"/>
</LinearLayout>
</LinearLayout>
group.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" >
<TextView
android:id="@+id/groupTo"
android:layout_width="wrap_content"
android:layout_height="40dp"
android:textSize="10pt"
android:textColor="#00ff00"
android:text="No Data"/>
</LinearLayout>
item.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" >
<TextView
android:id="@+id/childTo"
android:layout_width="wrap_content"
android:layout_height="40dp"
android:text="No Data"
android:textColor="#0000ff"
android:textSize="8pt"/>
</LinearLayout>
MainActivity.java文件:
package com.example.expandablelistviewtest;
import java.util.ArrayList;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
import android.os.Bundle;
import android.app.Activity;
import android.view.Menu;
import android.view.View;
import android.view.ViewGroup;
import android.widget.AbsListView;
import android.widget.BaseExpandableListAdapter;
import android.widget.ExpandableListAdapter;
import android.widget.ExpandableListView;
import android.widget.ExpandableListView.OnChildClickListener;
import android.widget.LinearLayout;
import android.widget.SimpleExpandableListAdapter;
import android.widget.TextView;
import android.widget.Toast;
public class MainActivity extends Activity {
private ExpandableListView elvFirst;
private ExpandableListView elvSecond;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
//初始化第一个可扩展列表框
initFirstExpandableListView();
//初始化第二个可扩展列表框
initSecondExpandableListView();
}
private void initFirstExpandableListView(){
elvFirst = (ExpandableListView)findViewById(R.id.elvFirst);
//list1为组列表框的每一个列表项提供数据
List<Map<String,String>> list1 = new ArrayList<Map<String,String>>() ;
Map<String,String> group1 = new HashMap<String,String>();
Map<String,String> group2 = new HashMap<String,String>();
group1.put("group", "列表1");
group2.put("group", "列表2");
list1.add(group1);
list1.add(group2);
//child1为第一个可扩展列表项下的子列表框提供数据
List<Map<String,String>> child1 = new ArrayList<Map<String,String>>() ;
Map<String,String> childData1 = new HashMap<String,String>();
Map<String,String> childData2 = new HashMap<String,String>();
childData1.put("child", "子列表1");
childData2.put("child", "子列表2");
child1.add(childData1);
child1.add(childData2);
//child2为第二个可扩展列表项下的子列表框提供数据
List<Map<String,String>> child2 = new ArrayList<Map<String,String>>() ;
Map<String,String> child2Data1 = new HashMap<String,String>();
Map<String,String> child2Data2 = new HashMap<String,String>();
child2Data1.put("child", "子列表3");
child2Data2.put("child", "子列表4");
child2.add(child2Data1);
child2.add(child2Data2);
//把为每一个可扩展项的子项提供数据给放到一个list中
List<List<Map<String,String>>> childs = new ArrayList<List<Map<String,String>>>();
childs.add(child1);
childs.add(child2);
//初始化数据适配器
//SimpleExpandableListAdapter的构造器有九个参数
//arg1: 上下文对象
//arg2: 为可扩展项提供数据
//arg3: 可扩展项的布局文件
//arg4: 可扩展项的数据来源
//arg5: 数据显示在布局文件中的什么地方
//arg6: 为可扩展项的每一子项提供数据
//arg7: 每一子项的布局文件
//arg8: 每一子项的数据来源
//arg9: 数据显示在布局文件中的什么地方
SimpleExpandableListAdapter sela = new SimpleExpandableListAdapter(this, list1, R.layout.group,
new String[]{"group"}, new int[]{R.id.groupTo}, childs, R.layout.item, new String[]{"child"}, new int[]{R.id.childTo});
//为可扩展列表框设置适配器
elvFirst.setAdapter(sela);
//为列表框二设置子项单击监听器
elvFirst.setOnChildClickListener(new OnChildClickListener() {
@SuppressWarnings("rawtypes")
@Override
public boolean onChildClick(ExpandableListView parent, View v,
int groupPosition, int childPosition, long id) {
Toast.makeText(MainActivity.this, "你点击了列表框1:"+((HashMap)parent.getExpandableListAdapter().getChild(groupPosition, childPosition)).get("child"), Toast.LENGTH_LONG).show();
return true;
}
});
}
private void initSecondExpandableListView(){
elvSecond = (ExpandableListView) findViewById(R.id.elvSecond);
//BaseExpandableListAdapter抽象类
//需要重写一部分方法,从而达到自定义数据适配器
ExpandableListAdapter ela = new BaseExpandableListAdapter() {
//可扩展列表项需要显示的数据
String[] group = new String[]{"列表1", "列表2" };
//每一子项需要显示的数据
String[][] childList = new String[][]{
{"子列表1","子列表2"}, {"子列表3","子列表4"}};
@Override
public boolean isChildSelectable(int groupPosition, int childPosition) {
return true;
}
@Override
public boolean hasStableIds() {
return true;
}
@Override
public View getGroupView(int groupPosition, boolean isExpanded,
View convertView, ViewGroup parent) {
LinearLayout ll = new LinearLayout(MainActivity.this);
ll.setOrientation(0);
TextView textview = getTextView();
//设置字体颜色
textview.setTextColor(android.graphics.Color.rgb(244, 33, 33));
//设置文本框对象需要显示的具体内容
textview.setText(getGroup(groupPosition).toString());
//设置字体大小
textview.setTextSize(20);
ll.addView(textview);
return ll;
}
@Override
public long getGroupId(int groupPosition) {
return groupPosition;
}
@Override
public int getGroupCount() {
return group.length;
}
@Override
public Object getGroup(int groupPosition) {
return group[groupPosition];
}
@Override
public int getChildrenCount(int groupPosition) {
return childList[groupPosition].length;
}
//getTextView 将返回一个文本框对象用于显示
private TextView getTextView(){
@SuppressWarnings("deprecation")
AbsListView.LayoutParams lp = new AbsListView.LayoutParams(ViewGroup.LayoutParams.FILL_PARENT,64);
TextView textview = new TextView(MainActivity.this);
textview.setLayoutParams(lp);
textview.setTextSize(15);
return textview;
}
@Override
public View getChildView(int groupPosition, int childPosition,
boolean isLastChild, View convertView, ViewGroup parent) {
TextView textview = getTextView();
//设置字体大小
textview.setTextColor(android.graphics.Color.rgb(150, 150, 33));
//设置文本框对象需要显示的具体内容
textview.setText(getChild(groupPosition,childPosition).toString());
return textview;
}
@Override
public long getChildId(int groupPosition, int childPosition) {
return childPosition;
}
@Override
public Object getChild(int groupPosition, int childPosition) {
return childList[groupPosition][childPosition];
}
};
//为列表框设置适配器
elvSecond.setAdapter(ela);
//为列表框二设置子项单击监听器
elvSecond.setOnChildClickListener(new OnChildClickListener() {
@Override
public boolean onChildClick(ExpandableListView parent, View v,
int groupPosition, int childPosition, long id) {
Toast.makeText(MainActivity.this, "你点击了列表框2:"+parent.getExpandableListAdapter().getChild(groupPosition, childPosition),
Toast.LENGTH_LONG).show();
return true;
}
});
}
@Override
public boolean onCreateOptionsMenu(Menu menu) {
getMenuInflater().inflate(R.menu.main, menu);
return true;
}
}
运行效果:
三、GridView
activity_main.xml布局文件:
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:tools="http://schemas.android.com/tools"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:orientation="vertical"
tools:context=".MainActivity" >
<TextView
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:textSize="12pt"
android:text="电影列表:" />
<GridView
android:id="@+id/gridview"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:numColumns="3" />
</LinearLayout>
picturegriditem.xml文件为每个项提供布局:
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="100dp"
android:layout_height="wrap_content"
android:gravity="center"
android:orientation="vertical">
<ImageView
android:id="@+id/imageView1"
android:layout_width="90dp"
android:layout_height="133dp"/>
<TextView
android:id="@+id/ItemText"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_below="@+id/imageView1"
android:text="TextView01"/>
</LinearLayout>
MainActivity.java文件:
package com.example.gridviewtest;
import java.util.ArrayList;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
import android.os.Bundle;
import android.app.Activity;
import android.view.Menu;
import android.view.View;
import android.widget.AdapterView;
import android.widget.AdapterView.OnItemClickListener;
import android.widget.GridView;
import android.widget.SimpleAdapter;
import android.widget.Toast;
public class MainActivity extends Activity {
private GridView gv;
private int[] images = new int[]{
R.drawable.st0,
R.drawable.st1,
R.drawable.st2,
R.drawable.st3,
R.drawable.st4,
R.drawable.st5,
R.drawable.st6,
R.drawable.st7,
R.drawable.st8,
R.drawable.st9,
};
String[] movieName = new String[]{
"谎言西西里",
"情况不妙",
"冰川时代",
"危城",
"封神传奇",
"盗墓笔记",
"使徒行者",
"超越星辰",
"宝贝当家",
"爱宠大机密",
};
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
initGridView();
}
@SuppressWarnings("unchecked")
private void initGridView(){
gv = (GridView)findViewById(R.id.gridview);
List<Map<String,Object>> list =new ArrayList<Map<String,Object>>();
@SuppressWarnings("rawtypes")
HashMap[] map = new HashMap[10];
for(int i = 0 ; i<10 ; i++){
map[i] = new HashMap<String,Object>();
map[i].put("image", images[i]);
map[i].put("name", movieName[i]);
list.add(map[i]);
}
SimpleAdapter sa = new SimpleAdapter(this, list, R.layout.picturegriditem, new String[]{"image","name"},
new int[]{R.id.imageView1,R.id.ItemText});
//设置适配器
gv.setAdapter(sa);
//注册监听器
gv.setOnItemClickListener(new OnItemClickListener() {
@SuppressWarnings("rawtypes")
@Override
public void onItemClick(AdapterView<?> arg0, View arg1,int arg2, long arg3) {
Toast.makeText(MainActivity.this,"你点击了:"+ ((HashMap)arg0.getItemAtPosition(arg2)).get("name").toString(), Toast.LENGTH_LONG).show();
}
});
}
@Override
public boolean onCreateOptionsMenu(Menu menu) {
getMenuInflater().inflate(R.menu.main, menu);
return true;
}
}
运行效果: