Activity Fragment 之间通信

 

用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

 

posted @ 2016-06-16 15:47  demon9  阅读(231)  评论(0编辑  收藏  举报