将参数从片段传递到另一个活动

时间:2019-06-21 10:50:42

标签: android

我正在使用导航控制器进行导航。我需要从当前片段导航到其他活动,并将一些数据传递给它。这一直是有问题的。导航到活动有效,但参数为null。这是我在导航图中使用的全局操作:

<action android:id="@+id/sign_out"
        app:destination="@id/login_activity">

    <argument
            android:name="clearSession"
            app:argType="boolean"
            android:defaultValue="true"/>

</action>

<activity android:id="@+id/login_activity"
          android:name="com.example.ui.login.LoginActivity"
          android:label="loginActivity">

    <argument
            android:name="clearSession"
            app:argType="boolean"
            android:defaultValue="true"/>

</activity>

以及菜单导航项:

<item android:title="@string/app">
    <menu>
        <group android:checkableBehavior="single">
            <item
                    android:id="@+id/sign_out"
                    android:icon="@drawable/ic_exit_to_app"
                    android:title="@string/sign_out"/>
        </group>
    </menu>
</item>

设置导航的代码:

navController = Navigation.findNavController(this, R.id.nav_host_fragment)
appBarConfiguration = AppBarConfiguration(setOf(R.id.connections_fragment, R.id.search_fragment), drawerLayout)

// Set up ActionBar
setSupportActionBar(binding.toolbar)
setupActionBarWithNavController(navController, appBarConfiguration)


// Set up navigation menu
binding.navigationView.setupWithNavController(navController)

我正在使用导航抽屉,并且导航视图中的菜单项的ID设置为“ sign_out”。单击此菜单项将导致加载“登录”屏幕,但是即使在操作和目标中都指定了参数,也不会提供参数。导航控制器启动“登录”活动时似乎未发送参数,我怀疑这是Android中的错误。实际上,Stackoverflow中没有任何帖子显示用户将数据从片段传递到另一个活动。

2 个答案:

答案 0 :(得分:0)

尝试这样。这样,您可以从Fragment调用Activity:

public class FragmentName extends Fragment{

   OnCallbackReceived myCallback;
   //Interface
   public interface OnCallbackReceived {
   public void Update();
}

在片段中:

@Override
public void onAttach(Activity activity) {
super.onAttach(activity);

try {
    myCallback= (OnCallbackReceived) activity;
} catch (Exception e) {}
}
// myCallback is the activity context.
// Call Events from Fragment 
myCallback.Update();

活动中:

public class MainActivity extends Activity
    implements FragmentName .OnCallbackReceived {
public override void Update() {
    //Your Logic
}

答案 1 :(得分:0)

您的sign_out操作是否在<fragment>标记内? 如果是这样,您可以调用使用navigation()方法:

  val bundle = Bundle().apply { putString("EXTRA_KEY", "EXTRA_VALUE") }
  findNavController().navigate(R.id.sign_out, bundle)

然后在LoginActivity中val stringExtra = intent.getStringExtra("EXTRA_KEY")