【问题标题】:Get Intent in Fragment在片段中获取意图
【发布时间】:2018-07-25 07:57:29
【问题描述】:

看到this 的问题后,我开始思考。我可以通过在 onCreateView 内部调用它来获得 Fragment 中的 Intent:

String Item = getActivity().getIntent().getExtras().getString("name");

问题在于getActivity 可能会返回null,以反驳我可以调用的:

if(getActivity() != null)
    String Item = getActivity().getIntent().getExtras().getString("name");
}

这会很好,但是..


我正在考虑在我的 Activity 中创建一个静态方法,然后通过调用该方法访问我的片段中的 Intent,如下所示(在我的 Activity 中):

public class DemoActivity extends Activity{
    static String name;

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_demo);
        //Getting the Intent from the previous Activity
        name = getIntent().getStringExtra("name");
    }

    public static String Name(){
        //returning the Intent
        return name;
    }

}

然后在我的 Fragment 中我可以这样称呼它:

String name = DemoActivity.Name();

我的问题:

我可以这样做吗?它会导致任何问题吗?为什么?


目前

一切正常。

【问题讨论】:

  • 它工作正常,但静态方法总是可以防止一些内存泄漏。 Intent 可能更可取。
  • @Thunder 我没有存储String,我将它传递给Fragment - stackoverflow.com/a/43480386/5550161
  • getActivity() 只会在您从 Activity 外部创建 Fragment 时返回 null。如果您总是在Activity 中创建Fragment,那么getActivity() 永远不应返回null
  • 变量名应该是静态的,这样才能被静态方法访问,这里的函数Name(),不能返回name,除非name是静态变量
  • @DavidWasser 目前Fragment 调用拥有FragmentActivity。换句话说,Activity1 持有一个片段,该片段启动第二个活动Activity2Activity2 持有我想要获取意图的片段。

标签: android android-fragments android-intent


【解决方案1】:

试试这样:

活动类:

 Bundle bundle = new Bundle();
 bundle.putString("your_key", "your_value");
 your_fragment.setArguments(bundle); 

片段类:

String your_variable = getArguments().getString("your_key");

【讨论】:

  • Bundle 是在前一个 Activity 的 Fragment 中创建的。
  • Bundle 附加到要创建的片段上,您可以通过if(getArguments() != null && getArguments.containsKey("your_key")) 验证来验证他的存在。这是最佳实践,也是最常用的一种。关于您的问题,如果您的活动被破坏会怎样?也许我们不明白你在这里的目标是什么。您只想将数据从 Activity 传递到片段?是这样吗?
  • 我想将数据从一个 Activity 中的 Fragment 传递到另一个 Activity 中的 Fragment。
  • @HB。我已经为上述问题发布了另一个答案
【解决方案2】:

在第一个活动片段中设置:

Bundle bundle = new Bundle();
bundle.putString("your_string_key", "your_value");

startActivity(new Intent(getActivity() your_second_activity.class).putExtra("bundle_key", bundle));

获取捆绑价值第二个活动:

fragment.setArguments(getIntent().getBundleExtra("bundle_key"));

在第二个活动片段中:

getArguments().getString("your_string_key")

【讨论】:

  • 你想将数据从第一个活动片段传递到第二个活动片段吗???
  • My Question -> 我可以这样吗?它会导致任何问题吗?为什么?
  • 是的,你可以做到..没问题
  • Kotlin 出了点问题。不工作——从活动到片段的一切都是空的。有“参数”和 requiresArgs() 的构造,并且没有按预期工作。回到书本!再一次,Kotlin 编译器的编译器天才们采用了一个简单的、有效的概念,并且不可能做到正确。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2020-11-15
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多