简体   繁体   English

Android-如何将数据从主要活动发送到加载的片段

[英]Android - How to send data from main activity to loaded fragment

I want to have a function that is constant between all my Fragments placed in MainActivity . 我想要一个在MainActivity放置的所有Fragments之间恒定的function I am not sure how to pass the data to the active Fragment since the Fragment will be unaware of the function being run. 我不确定如何将数据传递给active Fragment因为Fragment不会意识到正在运行的功能。

I have tried creating an interface in the MainActivity and have the Fragment implement the MainActivity.OnDataPass . 我尝试在MainActivity创建一个interface ,并让Fragment implement MainActivity.OnDataPass but not sure how to initiate the interface in the MainActivity I keep getting a NullPointerException . 但不确定如何在MainActivity初始化接口,但我一直收到NullPointerException

In my main activity: 在我的主要活动中:

public class Mainactivity extends FragmentActivity{
    OnDataPass dataPasser;
    BroadcastReceiver receiver;
    @Override 
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
        receiver = new BroadcastReceiver() {
            @Override
            public void onReceive(Context context, Intent intent) {
                String str = intent.getStringExtra("data");
                dataPasser.onDataPass(str);
            }
        };
    }

    public interface OnDataPass {
        public void onDataPass(String data);
    }
}

In my Fragment 在我的片段

public class Storage extends Fragment implements Mainactivity.OnDataPass{
    @Override
    public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState){
        mrootview = (ViewGroup) inflater.inflate(R.layout.storage, container, false);
        return mrootview;
    }

    @Override
    public void onDataPass(String data) {
        Log.v(TAG, data);

    }
}

am I even on the right track or is there a better way to send data to the fragment? 我是否在正确的轨道上,还是有更好的方法将数据发送到片段?

You are pretty far already: 您已经很远了:

public class Mainactivity extends FragmentActivity{
    OnDataPass dataPasser;

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

        //When you create your fragment, keep a reference of it in the dataPasser variable
        dataPasser = /* your storage fragment class or any other fragment that implements onDataPass*/
        ......
        receiver = new BroadcastReceiver() {
              @Override
               public void onReceive(Context context, Intent intent) {
                    String str = intent.getStringExtra("data");
                    dataPasser.onDataPass(str);
               }
        };
    }       


    public interface OnDataPass {
        public void onDataPass(String data);
    }
}

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM