将数据发送到容器活动

时间:2017-05-05 10:24:59

标签: android android-fragments

我有一个在片段和容器活动之间来回发送一些数据的问题,我成功了。令我困惑的是将我的数据从片段发送到活动,起初我实现了OnResume()OnStop()并通过意图发送数据并创建了无限循环,因此我将其删除。然后我做了setRetainInstance(true)并且它起作用并且给了我想要的行为。

我的问题是我的数据是如何真正发送的以及片段生命周期中的位置?

1 个答案:

答案 0 :(得分:1)

您也可以使用ARGV,使用Interface EventBus,或使用LocalBroadcastManager以及某种形式的Activity开始新Intent来实现此目的。 flag已传入其extras捆绑包或其他内容。

以下是使用界面的示例:

1。将功能sendDataToActivity()添加到界面(EventListener)。

//EventListener.java

public interface EventListener {

    public void sendDataToActivity(String data);
}

2。MainActivity

中实施此功能
// MainActivity.java

public class MainActivity extends AppCompatActivity implements EventListener {

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
    }

    @Override
    public void sendDataToActivity(String data) {
        Log.i("MainActivity", "sendDataToActivity: " + data);
    }
}

3。MyFragmentattach中创建一个监听器到Activity

4。最后,使用listener.sendDataToActivity("Hello World!")调用函数。

// MyFragment.java 

public class MyFragment extends Fragment {

    private EventListener listener;

    @Override
    public void onAttach(Activity activity)
    {
        super.onAttach(activity);
        if(activity instanceof EventListener) {
            listener = (EventListener)activity;
        } else {
            // Throw an error!
        }
    }

    @Override
    public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) {

        View view = inflater.inflate(R.layout.fragment_my, container, false);

        // Send data
        listener.sendDataToActivity("Hello World!");

        return view;
    }

    @Override
    public void onDetach() {
        super.onDetach();

        listener = null;
    }
}

希望这会有所帮助〜