【问题标题】:How to get an intent extra in a fragment from another activity in Kotlin?如何从 Kotlin 的另一个活动的片段中获得额外的意图?
【发布时间】:2021-08-06 15:19:07
【问题描述】:

我正在尝试使用以下代码从活动的片段中获取Extras。当我在onCreateView() 中添加代码时,它正常工作,但是它给出了一个空值。然后我将代码块移动到onCreate(),但应用程序崩溃错误 Error inflating class fragment。我用谷歌搜索了它,但找不到Kotlin 的答案。

以下是fragment中的代码

    if (activity?.intent!!.hasExtra("ServiceArea")) {
        productList = activity?.intent!!.getStringArrayExtra("ServiceArea").toString()
    }

以下是 Activity 中发送 extras 的代码。

val intent = Intent(this, DashboardFragment::class.java)
        intent.putExtra("ServiceArea", "allArea")
        intent.flags = Intent.FLAG_ACTIVITY_NEW_TASK or Intent.FLAG_ACTIVITY_CLEAR_TASK
        this.startActivity(intent)

【问题讨论】:

  • 尝试将片段的捆绑参数用于您需要的 f.setArguments(args),然后 getbundle 并获取数据。希望它可以帮助您。 developer.android.com/reference/android/app/Fragment
  • 你能告诉我我该怎么做吗?谢谢。
  • 您好,请检查您想要的答案

标签: android kotlin android-fragments


【解决方案1】:

您可以将 getIntent() 与 Fragments 一起使用,但您需要先调用 getActivity()。像getActivity().getIntent().getExtras().getString("image") 这样的东西可以工作。

另一种方法是:

   Bundle extras = getIntent().getExtras();
     if (extras != null)
     {
         Customer customer = (Customer)extras.getString("customer");
         // do something with the customer
      }
  }

科特林

    val extras = intent.extras
     if (extras != null) {
        val customer: Customer? = extras.getString("customer") as 
     Customer?
        // do something with the customer
    }

【讨论】:

  • 感谢您的回复,但没有成功。你检查过它是否对你有用吗?
  • 已编辑问题,请检查。
  • 你能重新检查你的代码吗,我要求Kotlin
  • 它不起作用,我应该对 putextra 代码进行任何更改吗?不是fragment 应该在我添加额外时使用吗?我尝试了ActivityFragment
  • 它在 onCreate() 和 onCreateView 中都返回 null
【解决方案2】:

请尝试这种方式可能会对您有所帮助,如果您希望在您的任务中完全这样做,那么您可以使用

首先在activity里面获取extra

在 Fragment 的父活动中

if (activity?.intent!!.hasExtra("ServiceArea")) { 

   areastring = activity?.intent!!.getStringExtra("ServiceArea").toString()
 }

然后对于带有来自父活动的捆绑的片段实例

fragment manager.add with 
newInstance(areastring)

static CountingFragment newInstance(String area) { 
   CountingFragment f = new
   CountingFragment(); 
   Bundle args = new Bundle();
   args.putString("area", areastring);
   f.setArguments(args); 
    return f; 
} 

在 Fragment 中使用该方法获取

bundle.getArgunents to get value

或者直接通过其他方式,您可以通过片段中的父活动对象使用此附加值 或者在创建时直接在片段的构造函数中传递参数对象,然后在片段中使用。

在 kotlin 中

Companion object{
   fun newInstance(String area) :   CountingFragment {
     var f:CountingFragment = CountingFragment(); 
     var args =  Bundle();
     args.putString("area", areastring);
      f.setArguments(args); 
      return f; 
 } 

}

【讨论】:

  • 我要求Kotlin,它似乎在Kotlin 中不起作用
  • 您好,请尝试这种方式来解决您面临的问题,转换它,在 kotlin 方法和处理方式在 java 和 kotlin 中没有不同,当您将 java 代码复制并粘贴到 kotlin 文件中时,它会弹出在 kotlin 中转换,所以请尝试。希望对你有帮助
  • Android Studio 在我复制和粘贴此代码时没有显示我们转换代码的弹出窗口,因为我不理解第二组代码我无法自己进行转换。
  • @Codist 现在请检查我在 kotlin 中更新了答案,你只需要像这样更新希望它可以帮助你
猜你喜欢
  • 2012-02-26
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多