在Fragment 中调用DialogFragmet的继承类MyAlertDialogFrag对象,实现提示框的复用。
来源:互联网 发布:如何java创建表格 编辑:程序博客网 时间:2024/04/29 18:53
由于在项目中很多地方会用到提示框,它给用户提供些提示信息,由于它仅仅只是起提示的作用,所以可以单独地定义一个包,在包中定义MyAlertDialogFrag类,此类继承DialogFragment。在下面的例子中,在MiMaXiuGaiFragment类中创建了MyAlertDialogFrag对象,并在MiMaXiuGaiFragment 中实现了提示框的调用。
MyAlertDialogFrag包的结构如下图:
MyAlertDialogFrag类的定义如下:
package com.example.dialogs;import com.example.mobileelectivesystem.R;import android.app.AlertDialog;import android.app.Dialog;import android.app.DialogFragment;import android.content.DialogInterface;import android.os.Bundle;/** * * @ClassName: MyAlertDialog * @Description: 提示警告框 * @author zhuzhp * @date 2014年3月24日 下午11:12:43 */public class MyAlertDialogFrag extends DialogFragment {public MyAlertDialogFrag() {super();}/** * * @Title: newInstance * @Description: 根据参数得到不同的消息提示框对象。这只会给出提示,不会在提示框中完成复杂的操作。 * @param @param title * @param @param message * @param @return * @return MyAlertDialog * @throws */public MyAlertDialogFrag newInstance(int title, int message) {MyAlertDialogFrag frag = new MyAlertDialogFrag();Bundle args = new Bundle();// 将参数存入Bundle,以便在传递过程中取出。args.putInt("title", title);//title为提框的标题,args.putInt("message", message);//message为提框的内容,frag.setArguments(args);return frag;}/** * 密码校验提示框 */@Overridepublic Dialog onCreateDialog(Bundle savedInstanceState) {int title = this.getArguments().getInt("title");int message = this.getArguments().getInt("message");AlertDialog.Builder builder = new AlertDialog.Builder(getActivity());builder.setTitle(title).setMessage(message).setPositiveButton(R.string.queren,new DialogInterface.OnClickListener() {public void onClick(DialogInterface dialog, int id) {}});return builder.create();}}
注意:该类不是静态类,其中的方法newInstance( int title, int message)也是非静态的,在该类中定义了个无参构造函数。这和官方的文档中的例子是不一样的,官方文档中的类定义成了静态的,在创建对象时也要注意,可以和官方文档中的例子好好比较下,官方文档例子。
下面就是要在实现在Fragment 调用继承了DialogFragment的类,在MiMaXiuGaiFragment 类中实现了OnClickListener 接口。代码如下:
package com.example.mobileelectivesystem.gerenxinxiguanli;import com.example.dialogs.MyAlertDialogFrag;import com.example.mobileelectivesystem.R;import com.example.util.MyApplication;import com.example.util.WebServiceHelper;import android.app.DialogFragment;import android.app.Fragment;import android.app.FragmentManager;import android.os.Bundle;import android.view.LayoutInflater;import android.view.View;import android.view.View.OnClickListener;import android.view.ViewGroup;import android.widget.Button;import android.widget.EditText;/** * * @ClassName: MiMaXiuGaiFragment * @Description: 实现密码修改功能。 * @author zhuzhp * @date 2014年3月24日 下午2:15:30 */public class MiMaXiuGaiFragment extends Fragment implements OnClickListener {private EditText chuShiMiMaText;private EditText xinMiMaText;private EditText queRenXinMiMaText;private Button queRenBut;private FragmentManager fragmentManager;private WebServiceHelper webSerHep;private MyApplication myApp;@Overridepublic void onCreate(Bundle savedInstanceState) {super.onCreate(savedInstanceState);webSerHep = new WebServiceHelper();fragmentManager = getFragmentManager();myApp = (MyApplication) getActivity().getApplication();}@Override/** * * container 参数是你的fragmentlayout将被插入的父ViewGroup(来自activity的layout). * savedInstanceState 参数是一个Bundle, 如果fragment是被恢复的,它提供关于fragment的之前的实例的数据, */public View onCreateView(LayoutInflater inflater, ViewGroup container,Bundle savedInstanceState) {View view = inflater.inflate(R.layout.grxxgl_mima_xiugai, container,false);chuShiMiMaText = (EditText) view.findViewById(R.id.chushi_mima);xinMiMaText = (EditText) view.findViewById(R.id.xin_mima);queRenXinMiMaText = (EditText) view.findViewById(R.id.queren_mima);queRenBut = (Button) view.findViewById(R.id.miMaXiuGai_querenButton);queRenBut.setOnClickListener(this);return view;}@Overridepublic void onPause() {super.onPause();}@Overridepublic void onClick(View v) {String xueHao = myApp.getXueHao();String chuShiMiMaStr = chuShiMiMaText.getText().toString();String xinMiMaStr = xinMiMaText.getText().toString();String queRenMiMaStr = queRenXinMiMaText.getText().toString();//判断新输入的密码和初始密码是否相同,以及确认密码是否和新密码不同。if (chuShiMiMaStr.equals(xinMiMaStr)) {DialogFragment dFrag = new MyAlertDialogFrag().newInstance(R.string.choice, R.string.mimaxiugai_tishi1);dFrag.show(fragmentManager, "dialog1");xinMiMaText.setText("");//清空输入的内容,在这是个偷懒的方法,本应该在提示框中的点击事件是实现的。} else if (!(xinMiMaStr.equals(queRenMiMaStr))) {DialogFragment dFrag = new MyAlertDialogFrag().newInstance(R.string.choice, R.string.mimaxiugai_tishi2);dFrag.show(fragmentManager, "dialog2");xinMiMaText.setText("");queRenXinMiMaText.setText("");} else {webSerHep.modifyPassWd(xueHao, queRenMiMaStr);//完成密码修改的操作}}}
在这个Fragment 中主要是完成密码修改的功能,在其中应注意MyAlertDialogFrag对象的创建与官方文档中创建的不同,当出没注意到,文档中的类是静态的创建MyAlertDialogFrag对象的时候,也和文档中的MyAlertDialogFragment.newInstance()一样,所以一直爆空指针异常。主要是自己不够仔细的愿意吧,这个困扰了自己很久。借此机会分享下吧,最后附几张图:
0 0
- 在Fragment 中调用DialogFragmet的继承类MyAlertDialogFrag对象,实现提示框的复用。
- 《C++面向对象》在C++中子类继承和调用父类的构造函数方法
- 面向对象中关于继承的调用
- 在Web Service中调用继承对象
- Javascript中对象继承的实现
- 在Fragment继承类中更新UI。
- 继承对象的执行调用
- 小记(2)在fragment中调用contentActivity无效的解决方法。
- Android在fragment中调用getacvitity()返回null的解决方法
- 在Fragment中如何调用指定Activity的方法
- Android在Fragment中不调用onActivityResult()的解决办法
- FragmentTabHost+fragment中获得fragment的对象
- Fragment中调用startActivityForResult()返回值的实现
- 在jsp中实现"类"的继承关系
- Java中继承类之间的创建对象并调用构造函数的学问
- 在Fragment中点击按钮关闭当前的Fragment返回上一个Fragment该如何实现
- Python中如何在继承的类中调用基类的方法
- 如何在oc的类中调用c++对象
- AIX红皮书摘选---LVM
- EASYUI TREEGRID异步加载数据
- Makefile自动化变量与模式规则
- 软件需求分析的方法
- Python challenge_7
- 在Fragment 中调用DialogFragmet的继承类MyAlertDialogFrag对象,实现提示框的复用。
- scene uilayer 关系
- setContentView
- 计算机操作系统——文件管理(2)
- 如何处理“该图片仅限百度用户内部交流使用”
- artDialog打开一个页面,获取页面元素值
- ArcEngine在地图上加载Server图层数据
- 第三周作业
- vim的保存文件和退出命令