android的组件基本都按如下方法生成:
1、生成一个组件对象:通过xml文件或在代码中生成
2、对组件进行设置
3、添加事件监听器
View:
View中的setTag(Onbect)表示给View添加一个格外的数据,以后可以用getTag()将这个数据取出来。
可以用在多个Button添加一个监听器,每个Button都设置不同的setTag。这个监听器就通过getTag来分辨是哪个Button 被按下。
- package fy.test;
- import android.app.Activity;
- import android.os.Bundle;
- import android.view.View;
- import android.widget.Button;
- public class Main extends Activity {
- /** Called when the activity is first created. */
- @Override
- public void onCreate(Bundle savedInstanceState) {
- super.onCreate(savedInstanceState);
- setContentView(R.layout.main);
- Button button1 = (Button) findViewById(R.id.Button01);
- Button button2 = (Button) findViewById(R.id.Button02);
- Button button3 = (Button) findViewById(R.id.Button03);
- Button button4 = (Button) findViewById(R.id.Button04);
- MyListener listener = new MyListener();
- button1.setTag(1);
- button1.setOnClickListener(listener);
- button2.setTag(2);
- button2.setOnClickListener(listener);
- button3.setTag(3);
- button3.setOnClickListener(listener);
- button4.setTag(4);
- button4.setOnClickListener(listener);
- }
- public class MyListener implements View.OnClickListener {
- @Override
- public void onClick(View v) {
- int tag = (Integer) v.getTag();
- switch (tag) {
- case 1:
- System.out.println("button1 click");
- break;
- case 2:
- System.out.println("button2 click");
- break;
- case 3:
- System.out.println("button3 click");
- break;
- case 4:
- System.out.println("button4 click");
- break;
- }
- }
- }
- }
main.xml
- <?xml version="1.0" encoding="utf-8"?>
- <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
- android:orientation="vertical"
- android:layout_width="fill_parent"
- android:layout_height="fill_parent"
- >
- <TextView
- android:layout_width="fill_parent"
- android:layout_height="wrap_content"
- android:text="@string/hello"
- />
- <Button
- android:text="Button01"
- android:id="@+id/Button01"
- android:layout_width="wrap_content"
- android:layout_height="wrap_content">
- </Button>
- <Button
- android:text="Button02"
- android:id="@+id/Button02"
- android:layout_width="wrap_content"
- android:layout_height="wrap_content">
- </Button>
- <Button
- android:text="Button03"
- android:id="@+id/Button03"
- android:layout_width="wrap_content"
- android:layout_height="wrap_content">
- </Button>
- <Button
- android:text="Button04"
- android:id="@+id/Button04"
- android:layout_width="wrap_content"
- android:layout_height="wrap_content">
- </Button>
- </LinearLayout>
- 本文来自CSDN博客,转载请标明出处:http://blog.csdn.net/fenghome/archive/2010/06/20/5681338.aspx
ListView:
1、生成ListView对象:可以在Layout中声明,也可以在代码中声明
2、设置ListView对象的各个属性。主要是Adatper
3、设置监听器
Adapter:
Adapter,可以理解为一种pb中的结果集(数据源+界面):
ArrayAdapter数据源:一维数组,界面:系统提供或自定义
数据源:数组 :String[] names = {"张三","李四"};
界面:
系统提供多种:
android.R.Layout.simple_list_item_1
android.R.Layout.simple_list_item_2
android.R.Layout.simple_list_item_checked
android.R.Layout.simple_list_item_multiple_choice
android.R.Layout.simple_list_item_single_choice
自定义: 是一个layout
绑定:ArrayAdapther adapter = new ArrayAdapter<String>(this,界面布局,数据源);
SimpleAdapter 数据源:多维数据 界面:系统提供多种或自定义
数据源:Map负责一行的每列,ArrayList负责所有行
界面:一个Layout或程序指定。
SimpleCursorAdapter 数据源:Cursor 界面:系统提供多种或自定义
BaseAdapter:自定义数据源与界面的关联方式,自定义行界面各组件的时间响应。
框架流程:
1、Activity显示主布局,发现包含ListView就绘制ListView
2、ListView绘制时会查找自己身上的Adapter,调用Adapter的getSize()取得行号,并逐行调用getView()取得“行view”并将其画出来。
3、Adapter负责将数据源与行界面相关联。
数据源:自定义
界面:自定义
先生成行界面
生成需要显示的数据
生成一个BaseAdapter的子类,
实现getCount() 方法:返回数据源的行数
实现getView()方法:设置数据与行View关联,设置组件事件响应。
- package fy.test;
- import java.util.ArrayList;
- import java.util.HashMap;
- import java.util.Map;
- import android.app.Activity;
- import android.content.Context;
- import android.os.Bundle;
- import android.view.LayoutInflater;
- import android.view.View;
- import android.view.ViewGroup;
- import android.view.View.OnClickListener;
- import android.widget.BaseAdapter;
- import android.widget.Button;
- import android.widget.ListView;
- import android.widget.TextView;
- public class HellowListView extends Activity {
- private ArrayList<Map<String, Object>> arrayList = new ArrayList<Map<String, Object>>();
- private Map<String, Object> map;
- /** Called when the activity is first created. */
- @Override
- public void onCreate(Bundle savedInstanceState) {
- super.onCreate(savedInstanceState);
- setContentView(R.layout.main);
- initDate();
- MyAdapter adapter = new MyAdapter(this);
- ListView list = (ListView) findViewById(R.id.ListView01);
- list.setAdapter(adapter);
- }
- private void initDate() {
- map = new HashMap<String, Object>();
- map.put("姓名", "张三");
- map.put("电话", "1132434343333");
- arrayList.add(map);
- map.put("姓名", "张三");
- map.put("电话", "1132434343333");
- arrayList.add(map);
- map.put("姓名", "张三");
- map.put("电话", "1132434343333");
- arrayList.add(map);
- }
- public class MyAdapter extends BaseAdapter {
- private LayoutInflater inflater;
- public MyAdapter(Context c) {
- this.inflater = LayoutInflater.from(c);
- }
- @Override
- public int getCount() {
- return arrayList.size();
- }
- @Override
- public Object getItem(int arg0) {
- // TODO Auto-generated method stub
- return null;
- }
- @Override
- public long getItemId(int arg0) {
- // TODO Auto-generated method stub
- return 0;
- }
- /**
- * 设置数据源与行View关联
- * 设置行中个组件的事件响应
- * 返回设置好的View
- */
- @Override
- public View getView(int arg0, View arg1, ViewGroup arg2) {
- //取得要显示的行View
- View myView = inflater.inflate(R.layout.list_item, null);
- TextView name = (TextView) myView.findViewById(R.id.TextView01);
- TextView phoneNum = (TextView) myView.findViewById(R.id.TextView02);
- Button button = (Button) myView.findViewById(R.id.Button01);
- //让行View的每个组件与数据源相关联
- name.setText((String) arrayList.get(arg0).get("姓名"));
- phoneNum.setText((String) arrayList.get(arg0).get("电话"));
- final String note = "按下的是" + arg0;
- button.setFocusable(false);
- //添加事件响应
- button.setOnClickListener(new OnClickListener() {
- @Override
- public void onClick(View v) {
- // TODO Auto-generated method stub
- System.out.println(note);
- }
- });
- return myView;
- }
- }
- }
main.xml
- <?xml version="1.0" encoding="utf-8"?>
- <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
- android:orientation="vertical"
- android:layout_width="fill_parent"
- android:layout_height="fill_parent"
- >
- <TextView
- android:layout_width="fill_parent"
- android:layout_height="wrap_content"
- android:text="@string/hello"
- />
- <EditText
- android:text="aaaaaaaa"
- android:id="@+id/EditText01"
- android:layout_width="wrap_content"
- android:layout_height="wrap_content">
- </EditText>
- <ListView
- android:id="@+id/ListView01"
- android:layout_height="fill_parent"
- android:layout_width="fill_parent">
- </ListView>
- </LinearLayout>
sime_list.x ml
- <?xml version="1.0" encoding="utf-8"?>
- <LinearLayout
- android:id="@+id/LinearLayout01"
- android:layout_width="fill_parent"
- android:layout_height="fill_parent"
- xmlns:android="http://schemas.android.com/apk/res/android"
- android:orientation="horizontal">
- <TextView
- android:id="@+id/TextView01"
- android:layout_width="wrap_content"
- android:layout_height="wrap_content">
- </TextView>
- <TextView
- android:id="@+id/TextView02"
- android:layout_width="wrap_content"
- android:layout_height="wrap_content">
- </TextView>
- <Button
- android:id="@+id/Button01"
- android:layout_width="wrap_content"
- android:layout_height="wrap_content" android:text="编辑">
- </Button>
- </LinearLayout>
- 本文来自CSDN博客,转载请标明出处:http://blog.csdn.net/fenghome/archive/2010/06/19/5680457.aspx