通用型 fragment dialog 提示输入框


去年三月开始,一直在做移动作业系统,安卓系统程序实现,webservice交互工作。在工作中,将一些代码抽象出来用于重用还是很有用的。

在系统开发中,已经开始设计平板程序开发,其中用到一个组件 fragment,在 fragment 组件中,不能直接调用 dialog 作为弹出显示,只能调用 DialogFragment,然而每次调用都写一次 DialogFragment 的继承,明显不现实,所以进行代码抽象,将重复的内容抽象出来。则孕生此文。

当前,我们先做一个通用型的字符串输入 DialogFragment 。

package com.jiechic.common.dailog; import com.jiechic.R; import com.jiechic.common.logh; import com.jiechic.common.dailog.listener.FragmentDialogListener; import android.app.Activity; import android.app.AlertDialog; import android.app.Dialog; import android.app.DialogFragment; import android.content.Context; import android.content.DialogInterface; import android.os.Bundle; import android.view.LayoutInflater; import android.view.View; import android.view.ViewGroup; import android.widget.EditText; public class DialogStringFragment extends DialogFragment { private final String TAG = getClass().getSimpleName(); private String title=null; private String date=null; private String lx=null; private FragmentDialogListener dismissListener=null; public static DialogStringFragment newInstance() { return new DialogStringFragment(); } @Override public Dialog onCreateDialog(Bundle savedInstanceState) { Context context=getActivity(); LayoutInflater inflater=getActivity().getLayoutInflater(); AlertDialog.Builder builder = new AlertDialog.Builder(getActivity()); builder.setTitle(title); View v=inflater.inflate(R.layout.fragmentdialogstring, (ViewGroup)((Activity) context).findViewById(R.id.dialogstring)); final EditText editText=(EditText) v.findViewById(R.id.dialogstringedittext); editText.setText(date); builder.setView(v); builder.setPositiveButton("确认", new DialogInterface.OnClickListener() { public void onClick(DialogInterface dialog, int whichButton) { date=editText.getText().toString(); close(true); } }); builder.setNegativeButton("取消", new DialogInterface.OnClickListener() { public void onClick(DialogInterface dialog, int whichButton) { close(false);// 删除 } }); Dialog dialog = builder.create(); logh.d(TAG); return dialog; } public void setDismissListener(FragmentDialogListener dismissListener) { this.dismissListener=dismissListener; } public void setDate(String date) { this.date = date; } public void setLx(String lx) { this.lx = lx; } private void close(boolean isupdate) { // TODO Auto-generated method stub Bundle args=new Bundle(); args.putBoolean("result", isupdate); args.putString("lx", lx); args.putString("date", date); DialogStringFragment.this.dismiss(); dismissListener.onFragmentDialog_Listener(args); } public void setTitle(String title) { this.title = title; } }

这个 dialogfragment 调用了一个回调函数类 FragmentDialogListener

package com.jiechic.common.dailog.listener; import android.os.Bundle; public interface FragmentDialogListener { public final String TAG="DialogFragmentListener"; public void onFragmentDialogListener(Bundle args); }

在这个dialogfragment 中,使用了这样的一个界面布局(一个输入框):

这样,一个简单的 dialogfragment 就形成了,接下来看如何调用它。

在调用的那个类下面继承回调函数 FragmentDialogListener

Dialog_String_Fragment dialog = DialogStringFragment.newInstance(); dialog.setCancelable(false);// 设置点击屏幕Dialog不消失 dialog.setLx("String"); dialog.setTitle("字符串"); dialog.setDate(et.getText().toString()); dialog.setDismissListener(main.this); dialog.show(getFragmentManager(), "String");

重写回调方法,即可把在 dialogfragment 输入的内容返回到界面想要的位置。

@Override public void onFragmentDialogListener(Bundle args) { // TODO Auto-generated method stub if(args.getBoolean("result")){ String lx=args.getString("lx"); String date=null; String []dates=new String[2]; if("String".equals(lx)){ date=args.getString("date"); et.setText(date); } } }

当然,,类似的 dialogfragment 输入也可以通用做到,关于相关代码,我已经上传到github了,大家可以到上面弄下来研究研究。

下期要坐的,就是把树形显示的通用代码弄出来,其实我已经知道怎么弄了。这样作为一个组件就可以重复利用了。

博客已经长草很长时间了,是时候该补补技术文章了呢。

声明:Jiechic's Blog|版权所有,违者必究|如未注明,均为原创|本网站采用BY-NC-SA协议进行授权

转载:转载请注明原文链接 - 通用型 fragment dialog 提示输入框


Just Jiechic's Blog