用DialogFragment创建dialog 输入账号密码 Activity想获取到 dialog里面的值
重写onCreateDialog创建Dialog , 创建接口tabnameListener ,并在点击登陆的时候 把activity强转为自定义的接口
1 public class dialog extends DialogFragment { 2 3 private EditText tabname; 4 5 public interface tabnameListener{ 6 void tabnameComplete(String name ); 7 } 8 9 @NonNull 10 @Override 11 public Dialog onCreateDialog(Bundle savedInstanceState) { 12 AlertDialog.Builder builder=new AlertDialog.Builder(getActivity()); 13 LayoutInflater inflater=getActivity().getLayoutInflater(); 14 View view=inflater.inflate(R.layout.fragment_dialog, null); 15 16 tabname= (EditText) view.findViewById(R.id.et_tab); 17 18 builder.setView(view).setPositiveButton("确定", new DialogInterface.OnClickListener() { 19 @Override 20 public void onClick(DialogInterface dialog, int which) { 21 if (!TextUtils.isEmpty(tabname.getText().toString())){ 22 tabnameListener listener= (tabnameListener) getActivity(); 23 listener.tabnameComplete(tabname.getText().toString()); 24 25 } 26 27 } 28 }).setNegativeButton("取消",null); 29 30 return builder.create(); 31 32 } 33 34 }
在 activity里 implements dialog.tabnameListener 现实方法 name就是 要获取的值 ,之后再进行其他操作
@Override public void tabnameComplete(String name) { toast(name); }
Activity中同样可以声明接口 让Fragment 来实现
先在Activity中 新建一个接口 让activity里的2个点击事件交给 Fragment 来处理
public interface LayoutChangeListener{ void changelayout(String type); }
这里只写一个事件 下面的事件可以直接抄上面的代码 只要把listener.changelayout(" "); 中的值换掉 ,Fragment 以此判断怎么处理事件
1 case R.id.action_plus: 2 // plus(); 3 4 // Fragment实现activity中的接口回调 5 int index = vp5.getCurrentItem(); 6 BaseFragment fragment = (BaseFragment) adapter.getItem(index); 7 LayoutChangeListener listener= fragment; 8 listener.changelayout("plus"); 9 10 return true; 11 12 case R.id.action_reduce: 13 reduce(); 14 return true;
来到Fragment ,让它 implements Activity.LayoutChangeListener
// 实现接口 @Override public void changelayout(String type) { if (type.equals("plus")){ //根据type的值 进行不同的操作 plus(); } }
Activity获取到fragment的对象后,可以直接调用fragment的方法
获取到fragment 可以用 findFragmentByTag findFragmentById
也可以如例子中,先用viewpager的getCurrentItem方法把当前fragment的位置拿到,再通过 adapter的getItem方法 获取到实例
fragment中获取activity就简单多了 直接 getActivity
注:如果在Fragment中需要Context,可以通过调用getActivity(),如果该Context需要在Activity被销毁后还存在,则使用getActivity().getApplicationContext()。
参考:
http://blog.csdn.net/lmj623565791/article/details/37992017
http://blog.csdn.net/lmj623565791/article/details/37815413
http://stackoverflow.com/questions/24341719/implement-activity-interface-in-fragment