Android学习笔记——Day4
13)ListView用法:
i、继承Activity
A、一个选项一个值
public class List1 extends Activity {
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
// 手工创建一个ListView对象
ListView listView = new ListView(this);
// 声明数据数组
/*String[] info = {"a","b","c","d","e","f","g","h","i"};
// 创建一个ArrayAdapter,传递数组的值
ArrayAdapter<String> adapter =
new ArrayAdapter<String>(this,android.R.layout.simple_list_item_1,info);
// 把ArrayAdapter作为适配器传递给ListView
listView.setAdapter(adapter);
this.setContentView(listView);*/
ArrayAdapter<CharSequence> adapter = ArrayAdapter.createFromResource(this,R.array.degree,android.R.layout.simple_list_item_1);
listView.setAdapter(adapter);
this.setContentView(listView);
}
}
B、一个选项两个值
public class List2 extends Activity {
// 先声明一个ArrayList<Map<String,Object>>
private ArrayList<Map<String, Object>> data;
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
// 加载数据
loadData();
ListView listView = new ListView(this);
//关键代码**********
SimpleAdapter adapter = new SimpleAdapter(this, data,
android.R.layout.simple_list_item_2,
new String[] { "名字", "电话" }, new int[] { android.R.id.text1,
android.R.id.text2 });
listView.setAdapter(adapter);
// 为ListView注册监听器
listView.setOnItemClickListener(new OnItemClickListener() {
public void onItemClick(AdapterView<?> parent, View view,
int position, long id) {
// TODO Auto-generated method stub
// setTitle(parent.getItemAtPosition(position).toString());
// setTitle(position+" "+id);
Map<String, Object> map = data.get(position);
String sex = (String) map.get("性别");
setTitle("当前客户性别为:" + sex);
}
});
setContentView(listView);
}
private void loadData() {
data = new ArrayList<Map<String, Object>>();
Map<String, Object> map1 = new HashMap<String, Object>();
map1.put("名字", "joe");
map1.put("电话", "13788888888");
map1.put("性别", "男");
Map<String, Object> map2 = new HashMap<String, Object>();
map2.put("名字", "tom");
map2.put("电话", "13766666666");
map2.put("性别", "女");
data.add(map1);
data.add(map2);
}
}
ii、继承ListActivity,采用这种方式不需让ListActivity手动注册什么监听器,直接覆盖父类的onListItemClick方法就可以了
public class List3 extends ListActivity {
private ArrayList<Map<String, Object>> data;
protected void onCreate(Bundle savedInstanceState) {
// TODO Auto-generated method stub
super.onCreate(savedInstanceState);
loadData();
SimpleAdapter adapter = new SimpleAdapter(this, data,
android.R.layout.simple_list_item_2,
new String[] { "名字", "性别" }, new int[] { android.R.id.text1,
android.R.id.text2 });
this.setListAdapter(adapter);
}
protected void onListItemClick(ListView l, View v, int position, long id) {
Map<String, Object> map = data.get(position);
String tel = (String) map.get("电话");
setTitle("当前客户电话为:" + tel);
}
private void loadData() {
data = new ArrayList<Map<String, Object>>();
Map<String, Object> map1 = new HashMap<String, Object>();
map1.put("名字", "joe");
map1.put("电话", "13788888888");
map1.put("性别", "男");
Map<String, Object> map2 = new HashMap<String, Object>();
map2.put("名字", "tom");
map2.put("电话", "13766666666");
map2.put("性别", "女");
data.add(map1);
data.add(map2);
}
}
14)对话框:Dialog是一切对话框的基类,需要注意的是,Dialog虽然可以在界面中显示,但是并非继承于习惯的View类,而是直接从Object继承,类似于Activity,Dialog也是有生命周期的,它的生命周期由Activity维护,Activity负责生成,保存,恢复它.在生命周期的每个阶段都有一些回调方法供系统反向调用.
AlertDialog是Dialog的一个子类,AlertDialog也是Android系统中最常用的对话框之一.一个AlertDialog可以有2个到3个按钮,可以对一个AlertDialog设置title以及Message.不能直接通过AlertDialog的构造参数生成一个AlertDialog,而是通过它的一个静态内部类AlertDialog.Builder来构造的,如:
使用AlertDialog:
AlertDialog类是Dialog类的子类。它默认提供了3个按钮和一个文本消息。这些按钮可以按需要来使他们显示或隐藏。下列代码将创建一个AlertDialog对话框,对话框上将向用户展示一个问题以及备选的yes/no答案:
AlertDialog dialog = new AlertDialog.Builder(context).create();
dialog.setMessage(”Do you play cricket?”);
dialog.setButton(”Yes”, myOnClickListener);
dialog.setButton2(”No”, myOnClickListener);
dialog.show();
myOnClickListener这个事件监听器的代码可以类似如下:
public void onClick(DialogInterface dialog, int i) {
switch (i) {
case AlertDialog.BUTTON1:
break;
case AlertDialog.BUTTON2:
break;
}
}
AlertDialog.Builder:
AlertDialog类中有一个内部类,名为‘Builder’,Builder类提供了为对话框添加多选或单选列表,以及为这些列表添加事件处理的功能。另外,这个Builder类将AlertDialog对话框上的3个按钮按照他们的位置分别称呼为:PositiveButton, NeutralButton, NegativeButton
下列代码是一个多选列表的例子:
Activity托管对话框:
Android也提供了创建对话框的快捷方式,在Activity中可以通过如showDialog(), onCreateDialog(), onPrepareDialog(),dismissDialog(), removeDialog()等方法来创建和管理对话框。
Activity的onCreateDialog方法用于在创建并显示对话框的时候调用,比如:
@Override
protected Dialog onCreateDialog(int id) {
return new AlertDialog.Builder(this).setMessage(”How are you?”).setPositiveButton(
”Fine”,
new DialogInterface.OnClickListener() {
public void onClick(DialogInterface dialog, int which) {
}
}).setNegativeButton(”Not so good”, new DialogInterface.OnClickListener() {
public void onClick(DialogInterface dialog, int which) {
}
}
).create();
}
A、使用编程来创建对话框内容
//核心代码: 先创建一个AlertDialog.Builder, 利用它创建一个AlertDialog对象
AlertDialog.Builder builder2 = new AlertDialog.Builder(this);
builder2.setTitle("核心提示:");
builder2
.setMessage("AlertDialog是Dialog的一个子类,AlertDialog也是Android系统中最常用的对话框之一.一个AlertDialog可以有2个到3个按钮,可以对一个AlertDialog设置title以及Message.不能直接通过AlertDialog的构造参数生成一个AlertDialog,而是通过它的一个静态内部类AlertDialog.Builder来构造的.");
builder2.setIcon(R.drawable.ic_menu_close_clear_cancel);
//设置确定按钮
builder2.setPositiveButton("确定",
new DialogInterface.OnClickListener() {
@Override
public void onClick(DialogInterface dialog, int which) {
// TODO Auto-generated method stub
}
});
//设置普通按钮
builder2.setNeutralButton("查看详细",
new DialogInterface.OnClickListener() {
public void onClick(DialogInterface dialog, int which) {
}
});
//设置取消按钮
builder2.setNegativeButton("取消",
new DialogInterface.OnClickListener() {
public void onClick(DialogInterface dialog, int which) {
}
});
builder2.show();
B、使用XML文件来创建对话框内容
在layout目录下创建dialog.xml
<?xml version="1.0" encoding="utf-8"?>
<TableLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:orientation="vertical" android:layout_width="fill_parent"
android:layout_height="fill_parent" android:stretchColumns="1">
<TableRow android:id="@+id/dialog_TableRow01"
android:layout_width="fill_parent" android:layout_height="wrap_content">
<TextView android:text="名字:" android:id="@+id/dialog_TextView01"
android:layout_width="wrap_content" android:layout_height="wrap_content"></TextView>
<EditText android:id="@+id/dialog_EditText01"
android:layout_width="fill_parent" android:layout_height="wrap_content"></EditText>
</TableRow>
<TableRow android:id="@+id/dialog_TableRow02"
android:layout_width="fill_parent" android:layout_height="wrap_content">
<TextView android:text="密码:" android:id="@+id/dialog_TextView02"
android:layout_width="wrap_content" android:layout_height="wrap_content"></TextView>
<EditText android:id="@+id/dialog_EditText02"
android:password="true" android:layout_width="fill_parent"
android:layout_height="wrap_content"></EditText>
</TableRow>
</TableLayout>
// 利用LayoutInflater可以加载一个layout文件
LayoutInflater flater = LayoutInflater.from(this);
View v = flater.inflate(R.layout.dialog3, null);
// 创建AlertDialog
AlertDialog.Builder builder3 = new AlertDialog.Builder(this);
builder3.setIcon(R.drawable.ic_menu_edit);
builder3.setTitle("信息编辑");
builder3.setView(v);
builder3.setPositiveButton("添加",
new DialogInterface.OnClickListener() {
public void onClick(DialogInterface dialog, int which) {
}
});
// 1.不能2个都是setPositiveButton,这样后面的这个会覆盖前面的按钮
// 2.同时也要注意,这里的OnClickListener是DialogInterface下面的OnClickListener
builder3.setNegativeButton("取消",
new DialogInterface.OnClickListener() {
public void onClick(DialogInterface dialog, int which) {
// TODO Auto-generated method stub
setTitle("选择了取消");
}
});
builder3.show();
C、进度对话框:
ProgressDialog dialog = new ProgressDialog(this);
dialog.setTitle("正在下载歌曲");
dialog.setMessage(" 请等待");
dialog.show();
Activity生命周期方法:
android数据存储: 4种方式
1. SharedPreferences
底层使用xml文件保存数据, 优点是操作简单,结构简单
缺点是不适宜保存一些复杂,海量数据
2. 文件 + IO
优点: 有java基础就很方便学习
缺点: 操作,检索,更新不方便
3. SQLite android内部数据库
4. 内容提供器
搭建数据共享的桥梁
SharedPreferences存储数据:
1)保存数据:
SharedPreferences sp = this.getSharedPreferences("ACCOUNT", Activity.MODE_PRIVATE);
// 如果是要完成写操作, 那么必须先创建 编辑器对象
Editor edit = sp.edit();
// 完成信息的编辑
edit.putString("user","admin");
edit.putString("passwd","123456");
// 提交数据
edit.commit();
2)取出数据:
SharedPreferences sp = this.getSharedPreferences("ACCOUNT", Activity.MODE_PRIVATE);
// 如果是要完成写操作, 那么必须先创建 编辑器对象
Editor edit = sp.edit();
String name = sp.getString("user","aaaaaaaaaaaaaaaaaa");
String passwd = sp.getString("passwd","bbbbbbbbbbbbbbbbb");