【问题标题】:How to send data from fragment to another activity?如何将数据从片段发送到另一个活动?
【发布时间】:2017-10-26 12:30:57
【问题描述】:

我需要将数据从 Fragment 发送到另一个活动

我在 HomeActivity 下的 LoadsFragment 中使用此代码

Intent intent = new Intent(activity, LoadActivity.class);
intent.putExtra("loadsPosition",position);
activity.startActivity(intent);

在另一个activity(LoadActivity)中接收数据

Intent intent=getIntent();    
String loadsPosition = intent.getStringExtra("loadsPosition");

但是意图没有额外的东西

请看下面的截图

【问题讨论】:

标签: android android-fragments android-intent


【解决方案1】:

但是意图没有额外的东西

您的屏幕截图显示确实如此......

您的第二个屏幕截图显示processIntent(Bundle bundle),但第三个屏幕截图显示processIntent(Intent intent),因此您应该澄清哪个不起作用。但是两个 Bundle 都不为空。

Fragments have their own startActivity method.你只需要父Activity来创建Intent

Intent intent = new Intent(getActivity(), LoadActivity.class);
intent.putExtra("loadsPosition",position);
startActivity(intent);

最重要的是,您的位置是一个整数,但您试图将其作为字符串获取,因此该字符串将为空

Intent intent=getIntent();    
int loadsPosition = intent.getIntExtra("loadsPosition", -1);

Intent 不应该为空,它应该有一个 Bundle。如果这个整数返回为-1,那么这里的默认值已经返回,你应该用一个更小的例子来调试更多

【讨论】:

    【解决方案2】:

    尝试使用接口。

    任何应该将数据传回其 HomeActivity 的片段都应声明一个接口来处理和传递数据。然后确保您的 HomeActivity 实现了这些接口。例如:

    在您的片段中,声明接口...

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

    然后,将接口的 HomeActivity 类的实现连接到 onAttach 方法中的片段,如下所示:

    OnDataPass dataPasser;

    @Override
    public void onAttach(Context context) {
        super.onAttach(context);
        dataPasser = (OnDataPass) context;
    }
    

    在您的片段中,当您需要处理数据的传递时,只需在 dataPasser 对象上调用它:

    public void passData(String data) {
        dataPasser.onDataPass(data);
    }
    

    最后,在实现 OnDataPass 的 HomeActivity 中...

    @Override
    public void onDataPass(String data) {
        Log.d("LOG","hello " + data);
    }
    

    【讨论】:

    • 你明白什么是问题吗?我正在尝试将数据发送到以片段开始的活动。
    【解决方案3】:

    在片段中使用

    Intent intent = new Intent(getActivity, LoadActivity.class);
    intent.putExtra("loadsPosition",position);
    activity.startActivity(intent);
    

    在加载活动中

    String loadsPosition = getIntent().getStringExtra("loadsPosition");
    

    【讨论】:

      【解决方案4】:

      你可以试试这样,看看你是否得到了额外的东西:

      1. 创建意图时: Intent intent = new Intent(this, LoadActivity.class);

      2. 但很可能您正在处理 getExtras() 而不是意图本身。

        try{ processIntent(getIntent()); }catch(JSONException e){ ...

      【讨论】:

      • new Intent(this, 在 Fragment 类中不起作用
      【解决方案5】:

      您没有为您的意图附加额外内容:

      Intent intent = new Intent(activity.this, LoadActivity.class);
      Bundle bundle = new Bundle();
      bundle.putInt("loadsPosition",pos);
      intent.putExtras(bundle);
      activity.startActivity(intent);
      

      或:

      Intent intent = new Intent(activity.this, LoadActivity.class);
      intent.putExtra("loadsPosition",pos);
      activity.startActivity(intent);
      

      【讨论】:

        【解决方案6】:

        您可以使用本地广播接收器或接口将数据从片段传递到活动。

        【讨论】:

          【解决方案7】:

          活动 1 片段:

           Intent intent = new Intent(getActivity(), SecondActivity.class);
           intent.putExtra("message", data); 
           startActivity(intent);
          

          在第二个活动片段中以这种方式检索

           SecondActivity activity = (SecondActivity) getActivity();
           String data= activity.getIntent().getExtras().getString("message");
          

          【讨论】:

          • 请看截图
          【解决方案8】:

          你也可以直接在fragment中获取activity的intent extras数据。 如果您的活动意图中有数据。请在您的 片段:

          Intent intent = getIntent().getStringExtra("position");
          

          【讨论】:

            猜你喜欢
            • 1970-01-01
            • 1970-01-01
            • 2020-03-29
            • 1970-01-01
            • 2015-12-02
            • 1970-01-01
            • 2014-05-04
            • 1970-01-01
            • 2015-01-01
            相关资源
            最近更新 更多