我正在使用导航控制器进行导航。我需要从当前片段导航到其他活动,并将一些数据传递给它。这一直是有问题的。导航到活动有效,但参数为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中没有任何帖子显示用户将数据从片段传递到另一个活动。
答案 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")