采用回调Activity的形式创建AlertDialog单选列表框
2014-01-07 21:34
267 查看
当你希望显示一个对话框时, 调用showDialog(int)并将对话框的id传给它.
当一个对话框第一次被请求时,Android调用onCreateDialog(int). 这里是你初始化对话框的地方. 这个回调函数传入的id和showDialog(int)相同. 创建对话框之后,将返回被创建的对象.
在对话框被显示之前,Android还会调用onPrepareDialog(int, Dialog). 如果你希望每次显示对话框时有动态更改的内容, 那么就改写这个函数. 该函数在每次一个对话框打开时都调用. 如果你不定义该函数,则对话框每次打开都是一样的. 该函数也会传入对话框的id以及你在onCreateDialog()中创建的Dialog对象.
最好的定义onCreateDialog(int) 和onPrepareDialog(int, Dialog) 的方法就是使用一个switch语句来检查传入的id. 每个case创建相应的对话框.
一个对话框总是被创建和显示为一个Activity的一部分. 你应该在Activity的onCreateDialog(int)中创建对话框. 当你使用这个回调函数时,Android系统自动管理每个对话框的状态并将它们和Activity连接, 将Activity变为对话框的"所有者". 这样,每个对话框从Activity继承一些属性. 例如,当一个对话框打开时,
MENU键会显示Activity的菜单, 音量键会调整Activity当前使用的音频流的音量.
注意: 如果你希望在onCreateDialog()方法之外创建对话框, 它将不会依附在Activity上. 你可以使用setOwnerActivity(Activity)来将它依附在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"
tools:context=".MainActivity"
android:orientation="vertical">
<Button android:id="@+id/mybut"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="弹出单选列表框"
android:layout_gravity="center_horizontal"/>
<TextView
android:id="@+id/textView"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="@string/hello_world"
android:layout_gravity="center_horizontal"/>
</LinearLayout>
Main.java
package com.example.singlechoicedialog2;
import android.os.Bundle;
import android.app.Activity;
import android.app.AlertDialog;
import android.app.Dialog;
import android.app.AlertDialog.Builder;
import android.content.DialogInterface;
import android.content.DialogInterface.OnClickListener;
import android.graphics.Color;
import android.util.Log;
import android.view.View;
import android.widget.Button;
import android.widget.TextView;
public class MainActivity extends Activity {
final int SINGLE_DIALOG=0x11;
Button button;
TextView textView;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
button=(Button) super.findViewById(R.id.mybut);
textView=(TextView) super.findViewById(R.id.textView);
button.setOnClickListener(new View.OnClickListener() {
@SuppressWarnings("deprecation")
@Override
public void onClick(View v) {
//当调用showDialog的时候,Android调用OnCreateDialog(int id)方法,返回一个对话框
showDialog(SINGLE_DIALOG);
}
});
}
@Override
protected Dialog onCreateDialog(int id){
Log.i("", ""+id);
//判断是那种类型的对话框
switch(id){
case SINGLE_DIALOG:
Builder b=new AlertDialog.Builder(this);
b.setIcon(R.drawable.ic_launcher);
b.setTitle("回调形式建立对话框");
b.setSingleChoiceItems(new String[]{"红色","绿色","蓝色"},1, new OnClickListener(){
@Override
public void onClick(DialogInterface dialog, int which) {
switch(which){
case 0:
textView.setBackgroundColor(Color.RED);
break;
case 1:
textView.setBackgroundColor(Color.GREEN);
break;
case 2:
textView.setBackgroundColor(Color.BLUE);
break;
}
}
});
b.setNegativeButton("确定", null);
return b.create();
}
return null;
}
}
当一个对话框第一次被请求时,Android调用onCreateDialog(int). 这里是你初始化对话框的地方. 这个回调函数传入的id和showDialog(int)相同. 创建对话框之后,将返回被创建的对象.
在对话框被显示之前,Android还会调用onPrepareDialog(int, Dialog). 如果你希望每次显示对话框时有动态更改的内容, 那么就改写这个函数. 该函数在每次一个对话框打开时都调用. 如果你不定义该函数,则对话框每次打开都是一样的. 该函数也会传入对话框的id以及你在onCreateDialog()中创建的Dialog对象.
最好的定义onCreateDialog(int) 和onPrepareDialog(int, Dialog) 的方法就是使用一个switch语句来检查传入的id. 每个case创建相应的对话框.
一个对话框总是被创建和显示为一个Activity的一部分. 你应该在Activity的onCreateDialog(int)中创建对话框. 当你使用这个回调函数时,Android系统自动管理每个对话框的状态并将它们和Activity连接, 将Activity变为对话框的"所有者". 这样,每个对话框从Activity继承一些属性. 例如,当一个对话框打开时,
MENU键会显示Activity的菜单, 音量键会调整Activity当前使用的音频流的音量.
注意: 如果你希望在onCreateDialog()方法之外创建对话框, 它将不会依附在Activity上. 你可以使用setOwnerActivity(Activity)来将它依附在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"
tools:context=".MainActivity"
android:orientation="vertical">
<Button android:id="@+id/mybut"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="弹出单选列表框"
android:layout_gravity="center_horizontal"/>
<TextView
android:id="@+id/textView"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="@string/hello_world"
android:layout_gravity="center_horizontal"/>
</LinearLayout>
Main.java
package com.example.singlechoicedialog2;
import android.os.Bundle;
import android.app.Activity;
import android.app.AlertDialog;
import android.app.Dialog;
import android.app.AlertDialog.Builder;
import android.content.DialogInterface;
import android.content.DialogInterface.OnClickListener;
import android.graphics.Color;
import android.util.Log;
import android.view.View;
import android.widget.Button;
import android.widget.TextView;
public class MainActivity extends Activity {
final int SINGLE_DIALOG=0x11;
Button button;
TextView textView;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
button=(Button) super.findViewById(R.id.mybut);
textView=(TextView) super.findViewById(R.id.textView);
button.setOnClickListener(new View.OnClickListener() {
@SuppressWarnings("deprecation")
@Override
public void onClick(View v) {
//当调用showDialog的时候,Android调用OnCreateDialog(int id)方法,返回一个对话框
showDialog(SINGLE_DIALOG);
}
});
}
@Override
protected Dialog onCreateDialog(int id){
Log.i("", ""+id);
//判断是那种类型的对话框
switch(id){
case SINGLE_DIALOG:
Builder b=new AlertDialog.Builder(this);
b.setIcon(R.drawable.ic_launcher);
b.setTitle("回调形式建立对话框");
b.setSingleChoiceItems(new String[]{"红色","绿色","蓝色"},1, new OnClickListener(){
@Override
public void onClick(DialogInterface dialog, int which) {
switch(which){
case 0:
textView.setBackgroundColor(Color.RED);
break;
case 1:
textView.setBackgroundColor(Color.GREEN);
break;
case 2:
textView.setBackgroundColor(Color.BLUE);
break;
}
}
});
b.setNegativeButton("确定", null);
return b.create();
}
return null;
}
}
相关文章推荐
- Win10安装问题 无法安装到这个磁盘 采用gpt分区形式 我们无法创建新的分区 也找不到现有分区 ThinkPad
- Oracle11g中,设置主键为自增1形式-创建Trigger
- 采用懒汉式来创建线程
- xml形式参数 添加存储过程的创建
- pbwebfrom采用JS来创建右键弹出菜单
- 创建MP3解码器 - 采用Symbian中MAD(MPEG音频解码库)用法
- 无法从其“Checked”属性的字符串表示形式“checked”创建“System.Boolean”类型
- 以邻接表的形式创建带权值的有向图即有向网
- PHP之创建对象的基本形式
- ASP.NET MVC 5– 采用Wijmo MVC 5模板1创建应用程序分钟
- 单例模式中采用的延迟加载创建单例(内部类)
- 爪哇国新游记之十二----线程创建的两种形式
- Azure 动手演示之一:采用定制化方法在 Azure 中创建虚拟机
- Effective C++条款5:对应的new和delete要采用相同的形式
- Android中数据存储--采用SQLite存储数据及在SDCard中创建数据库
- Struts2采用注解形式配置action
- web项目的两个创建形式website和webapplication
- .NET的资源并不限于.resx文件,你可以采用任意存储形式[上篇]
- 条款5:对应的new和delete要采用相同的形式 [内存管理]
- sql server 通过复制的形式创建表