Android(安卓)继承DialogFragment弹出dialog对话框
16lz
2021-01-26
相信现在Android软件开发员,都经常用到这种方式弹出对话框的。Android继承DialogFragment弹出dialog对话框,这样弹出有很多可以灵活处理地方,想什么启动,什么时候数据接口返回都可以,有自已layout布局,生命周期。下面看看我写demo。
本文代码下载:请点击这里
转载请注明出处:http://blog.csdn.net/qq_16064871
一、MainActivity
[java] view plain copy
- packagecom.example.fragmentdialogdemo;
- importcom.example.fragmentdialogdemo.TestDialog.onTestListener;
- importandroid.os.Bundle;
- importandroid.support.v4.app.FragmentActivity;
- importandroid.view.Menu;
- importandroid.view.View;
- importandroid.view.View.OnClickListener;
- importandroid.widget.Button;
- importandroid.widget.TextView;
- importandroid.widget.Toast;
- publicclassMainActivityextendsFragmentActivityimplementsOnClickListener,
- onTestListener{
- privateStringmstrName="";
- privateStringmstrHigh="";
- @Override
- protectedvoidonCreate(BundlesavedInstanceState){
- super.onCreate(savedInstanceState);
- setContentView(R.layout.activity_main);
- initUI();
- }
- privatevoidinitUI(){
- ButtonbuttonTest=(Button)findViewById(R.id.buttonTest);
- buttonTest.setOnClickListener(this);
- }
- @Override
- publicbooleanonCreateOptionsMenu(Menumenu){
- getMenuInflater().inflate(R.menu.main,menu);
- returntrue;
- }
- //接口回调的函数
- @Override
- publicvoidonTestListener(intuniqueIdentifier,StringstrName,
- StringstrHigh){
- if(uniqueIdentifier==1){
- Toast.makeText(getApplicationContext(),
- "姓名:"+strName+",身高:"+strHigh,Toast.LENGTH_LONG)
- .show();
- TextViewtextView1=(TextView)findViewById(R.id.textView1);
- textView1.setText("姓名:"+strName+",身高:"+strHigh);
- }
- mstrName=strName;
- mstrHigh=strHigh;
- }
- @Override
- publicvoidonClick(Viewarg0){
- switch(arg0.getId()){
- caseR.id.buttonTest:
- //实例化TestDialog,可以传参数进去,例如标题,或者其他参数,还有一个唯一码.
- TestDialogdialog=newTestDialog().newInstance("请输入",1,
- mstrName,mstrHigh);
- dialog.show(this.getSupportFragmentManager(),"TestDialog");
- break;
- default:
- break;
- }
- }
- }
二、TestDialog
[java] view plain copy
- packagecom.example.fragmentdialogdemo;
- importandroid.app.Activity;
- importandroid.app.AlertDialog;
- importandroid.app.Dialog;
- importandroid.content.DialogInterface;
- importandroid.os.Bundle;
- importandroid.support.v4.app.DialogFragment;
- importandroid.view.View;
- importandroid.widget.Button;
- importandroid.widget.EditText;
- publicclassTestDialogextendsDialogFragment{
- //mUniqueFlag作用是唯一码,可以使返回时做判断
- privateintmUniqueFlag=-1;
- privateonTestListenermOnListener;
- privateEditTextmeditTextName,meditTextHigh;
- protectedButtonmButtonPositive;
- /**
- *新建实例
- *
- *@paramtitle
- *@paramunique
- *@paramstrName
- *@paramstrHigh
- *@return
- */
- publicstaticTestDialognewInstance(Stringtitle,intunique,
- StringstrName,StringstrHigh){
- TestDialogtDialog=newTestDialog();
- Bundleargs=newBundle();
- args.putString("SelectTemplateTitle",title);
- args.putInt("MultipleTemplate",unique);
- args.putString("TemplateName",strName);
- args.putString("TemplateHigh",strHigh);
- tDialog.setArguments(args);
- returntDialog;
- }
- publicinterfaceonTestListener{
- /**
- *
- *@paramuniqueIdentifier
- *唯一标识
- *@paramstrName
- *@paramstrHigh
- */
- publicabstractvoidonTestListener(intuniqueIdentifier,
- StringstrName,StringstrHigh);
- }
- //旋转时候保存
- @Override
- publicvoidonSaveInstanceState(BundleoutState){
- super.onSaveInstanceState(outState);
- outState.putString("InputName",meditTextName.getText().toString());
- outState.putString("InputHigh",meditTextHigh.getText().toString());
- }
- @Override
- publicDialogonCreateDialog(BundlesaveInstanceState){
- Stringtitle=getArguments().getString("SelectTemplateTitle");
- mUniqueFlag=getArguments().getInt("MultipleTemplate");
- AlertDialog.BuilderBuilder=newAlertDialog.Builder(getActivity())
- .setTitle(title)
- .setPositiveButton("确定",newDialogInterface.OnClickListener(){
- @Override
- publicvoidonClick(DialogInterfacedialog,intwhich){
- //触发数据回调
- if(mOnListener!=null)
- mOnListener.onTestListener(mUniqueFlag,
- meditTextName.getText().toString(),
- meditTextHigh.getText().toString());
- }
- }).setNegativeButton("取消",null);
- //添加xml布局
- Viewview=getActivity().getLayoutInflater().inflate(
- R.layout.test_dialog,null);
- setupUI(view);
- //旋转后,恢复数据
- if(saveInstanceState!=null){
- StringstrName=saveInstanceState.getString("InputName");
- if(strName!=null)
- meditTextName.setText(strName);
- StringstrHigh=saveInstanceState.getString("InputHigh");
- if(strHigh!=null)
- meditTextHigh.setText(strHigh);
- }
- Builder.setView(view);
- //创建对话框
- AlertDialogdialog=(AlertDialog)Builder.create();
- returndialog;
- }
- privatevoidsetupUI(Viewview){
- if(view==null)
- return;
- StringstrName=getArguments().getString("TemplateName");
- StringstrHigh=getArguments().getString("TemplateHigh");
- meditTextName=(EditText)view.findViewById(R.id.editTextName);
- meditTextHigh=(EditText)view.findViewById(R.id.editTextHigh);
- meditTextName.setText(strName);
- meditTextHigh.setText(strHigh);
- }
- //onAttach是关联activity的,用接口回调
- @Override
- publicvoidonAttach(Activityactivity){
- super.onAttach(activity);
- try{
- mOnListener=(onTestListener)activity;
- }catch(ClassCastExceptione){
- dismiss();
- }
- }
- }
三、activity的xml
[html] view plain copy
- <LinearLayoutxmlns: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:id="@+id/textView1"
- android:layout_width="match_parent"
- android:layout_height="80dp"
- android:gravity="center"
- android:textSize="18sp"
- android:text="点击button"/>
- <Button
- android:id="@+id/buttonTest"
- android:layout_width="wrap_content"
- android:layout_height="wrap_content"
- android:text="Button"/>
- </LinearLayout>
四、dialog对话框xml
[html] view plain copy
- <LinearLayoutxmlns: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:id="@+id/textView1"
- android:layout_width="match_parent"
- android:layout_height="80dp"
- android:gravity="center"
- android:textSize="18sp"
- android:text="点击button"/>
- <Button
- android:id="@+id/buttonTest"
- android:layout_width="wrap_content"
- android:layout_height="wrap_content"
- android:text="Button"/>
- </LinearLayout>
五、需要注意事项,关于这样使用版本问题
主要是sdk版本的问题,因为Fragment是在3.0提出的,为了兼容低版本,需要引入一个android-support-v4.jar,但是在实例化 FragmentManager时,不能用getFragmentManager()这个方法。如果找不到这个getFragmentManager()这个方法,就如下解决。
解决办法:
1、引入一个android-support-v4.jar
2、需要实例化的activity必须 extends FragmentActivity
3、用this.getSupportFragmentManager();来替代getFragmentManager()
也可以主要有上面我写的例子,也有这方面的原因。注意导入jar包。
六、效果图如下
到这里就结束了,欢迎交流学习。
更多相关文章
- SpringBoot 2.0 中 HikariCP 数据库连接池原理解析
- 一句话锁定MySQL数据占用元凶
- Android音频系统之AudioFlinger(三)
- Android(安卓)五大存储方式详解
- 【Android(安卓)Developers Training】 95. 创建一个同步适配器
- AIDL进程间传递复杂数据类型—AIDL传递android.os.Parcelable接
- 【Android(安卓)Developers Training】 100. 使用Intent修改联系
- uni-app提交表单到后端,接收表单数据
- Android(安卓)studio 插件推荐