您的位置:首页 > 移动开发 > Android开发

android-Fragment和Activity通信:将Fragment中的数据传入Activity

2015-09-05 11:02 453 查看
有时候我们需要Fragment和Activity进行通信,说白了,就是将Activity的值传入Fragment或者将Fragment中的值传入Activity。从Activity将数据传入Fragment,可以通过一下代码实现,假设WorkerChoose是我们的一个Fragment:

public static WorkerChoose newInstance(String workersOrder) {
        WorkerChoose fragment = new WorkerChoose();
        Bundle args = new Bundle();
        args.putString(WORKERS_ORDER, workersOrder);
        fragment.setArguments(args);
        return fragment;
    }

也就是说我们通过调用fragment.setArguments(args); 来实现数据传入,在onCreate()方法中获取传入的数据:

@Override
    public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        if (getArguments() != null) {
            workersOrder = getArguments().getString(WORKERS_ORDER);
        }
    }


那么如何将Fragment中的数据传入Activity中哪?首先我们需要定义个接口,比如这样:

public interface GetWorker {
        public void onChoosen(GroupWorker mGroupWorker);
    }

接口定义好了,我们需要在Fragment中实例化这个接口,而且在onAttach()方法中有一个强制类型转换:

public class WorkerChoose extends Fragment {
       private GetWorker getWorker;
       ......
          @Override
       public void onAttach(Activity activity) {
        super.onAttach(activity);
        try {
            getWorker = (GetWorker) activity;
        } catch (ClassCastException e) {
            throw new ClassCastException(
                    activity.toString() + " must implementOnArticleSelectedListener");
        }
    }
    }


如果activity没有实现接口,fragment会抛出 ClassCastException 异常。正常情形下,getWorker成员会保持一个到activity的GetWorker实现的引用,因此WorkerChoose可以通过调用在GetWorker接口中定义的方法分享事件给activity。这个地方是关键!

最后,在使用Fragment的Activity中实现该接口的相应方法,即可使Fragment中的数据传入Activity中!
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: