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

时间: 2024-08-29 18:57:50

Activity Fragment 之间通信的相关文章

Activity和Fragment之间通信

MainActivity4代码(Activity-Fragment通信) 1 package fragmentdemo.example.administrator.fragmentdemo; 2 3 import android.app.Activity; 4 import android.app.FragmentManager; 5 import android.app.FragmentTransaction; 6 import android.os.Bundle; 7 import andr

简单的fragment之间通信交流的实现

前言:本篇文章是利用fragment最基础的知识,仅供初学者观看,也为我以后要做相关知识做基础准备.如果是大神的话,浪费你几分钟看下也可以. 关于fragment那些api的基础知识,你可以点击这里查看Android Fragment 基本介绍 这篇文章将不会叙述. 首先,我们看下界面 左边的TextView会根据右边点击button的不同而改变. 下面开始介绍代码: 1.在layout里新建fragment1.xml <?xml version="1.0" encoding=&

fragment的通信之bundle

fragment之间通信除了通过activity之外还可以通过bundle来实现 Bundle bundle = new Bundle(); bundle.putString("key","value"); MenuFragment menuFragment = new MenuFragment(); menuFragment.setArguments(bundle); 取数据时用 Bundle bundle = menuFragment.getArguments(

搭建Activity与Fragment,Fragment与Fragment之间的通信架构

内心独白:  曾几何时但凡听到架构之两个字,总能联想到老子说的一句话:"玄之又玄,众妙之门".说不清,道不明.就像是看不见,摸不着,但又真实存在的东西给我们的那种感觉. 回顾人类的历史,繁重的劳动让我们意识到工具的必要性和重要性,并学会了去发明和使用工具.当我进行了大量的,甚至是繁重的编程之后,也开始重新意识到架构的必要性和重要性.当然软件工程发展了这么多年,构架与模式之类的东西前辈们早就说过并且践行与呼吁过,并且也留下了很多值得我们学习和研究的构架模式.但于我个人而言,在没有经历过痛

Fragment的生命周期&amp;同一Activity下不同Fragment之间的通信

Android开发:碎片Fragment完全解析(2) Fragment的生命周期 和Activity一样,Fragment也有自己的生命周期,理解Fragment的生命周期非常重要,我们通过代码的方式来瞧一瞧Fragment的生命周期是什么样的: 1 publicclass Fragment1 extends Fragment { 2 publicstaticfinal String TAG = "Fragment1"; 3 @Override 4 public View onCre

Activity与Fragment之间的通信

有时候我们需要在fragment与Activity之间通信,下面简单的总结下. 首先贴一个结果吧.在输入框中输入信息-->按钮-->弹出消息toast 分两部分: Activity——>Fragment 在Activity中创建Bundle数据包,并且调用Fragment的setArguments(Bundle bundle). FragmentActivity.java fragment.java  Fragment——>Activity 需要在Fragment中定义一个内部回调

Android - Fragment (三)不同Fragment之间的通信

在Fragment的java文件中,可以使用getActivity()来获得调用它的activity, 然后再找到另一个Fragment,进行通信 getActivity().getFragmentManager().findFragmentById(R.id.fragment_list); 但这样做耦合度太高,不方便后续的修改操作 Fragment与其附着的Activity之间的通信,都应该由Activity来完成 不能是多个Fragment之间直接通信 Fragment与其附着的Activi

[转][译][Android基础]Android Fragment之间的通信

2014-2-14 本篇文章翻译自Android官方的培训教程,我也是初学者,觉得官方的Training才是最好的学习材料,所以边学边翻译,有翻译不好的地方,请大家指正. 如果我们在开发过程中为了重用Fragment这个UI组件,那么我们应该把Fragment设计成是“自包含”.“模块化”组件,这种组件定义自己的布局和行为.一旦我们成功定义了这样的可重用的Fragment,我们就可以将他们与Activity进行关联,然后与整个Application进行整体的UI组装. 我们经常需要一个Fragm

两个简单Fragment之间的通信

现在我要做个Fragment与Fragment之间的通信小demo. 建立两个Fragment,然后各添加1个按钮和1个TextView. 单击Fragment1的按钮修改Fragment2里的TextView文本. 相同的,单击Fragment2里面的按钮修改Fragment1的TextView文本. 前期准备:在Activity里面放进两个fragment: 1和2,再为其各绑定View. public class Fragment1 extends Fragment { public Vi