当我在 jetpack compose 中旋转我的应用程序(带导航)时,所有数据都会重置
每次旋转后,它都会进入 Activity 的 onCreate 并再次创建 NavHost 和 ViewModel。我认为这会通过应用程序状态来处理
起始活动:
class NavActivity : ComponentActivity() {
override fun onCreate(savedInstanceState: Bundle?) {
super.onCreate(savedInstanceState)
setContent {
MyAppTheme() {
MyAppApp()
}
}
}
}
Run Code Online (Sandbox Code Playgroud)
包含 NavHost 的应用程序:
@Composable
fun MyAppApp(
appState: MyAppAppState = rememberAppState()
) {
NavHost(
navController = appState.navController,
startDestination = Screen.ProductAddPath.route
)
{
composable(Screen.ProductAddPath.route) {
ProductEditView(
vm = ProductEditViewModel (appState.context)
)
}
}
}
Run Code Online (Sandbox Code Playgroud)
视图模型:
class ProductEditViewModel(context: Context) : ViewModel() {
private val _productName = MutableStateFlow("qsd")
val productName = …Run Code Online (Sandbox Code Playgroud) 我使用以下方法切换我的片段:
FragmentTransaction tx = getSupportFragmentManager().beginTransaction();
tx.replace(R.id.main, Fragment.instantiate(MainActivity.this, fragments[pos]));
tx.addToBackStack("tag");
tx.commit();
Run Code Online (Sandbox Code Playgroud)
但是当我切换片段时,后退按钮或左插入符号没有出现在我的操作栏上.我已经设定
getActionBar().setDisplayHomeAsUpEnabled(true);
getActionBar().setHomeButtonEnabled(true);
Run Code Online (Sandbox Code Playgroud)
在主要活动,但仍然无法正常工作.
我将前两行代码放在错误的地方或类中吗?或者是我从片段导航到另一个没有显示左箭头/插入符号的片段?
我想在我的Android应用程序中实现导航抽屉.我使用了本教程:http://manishkpr.webheavens.com/android-navigation-drawer-example-using-fragments/ ,它显示了使用片段实现导航抽屉.但是当我试图在API 10(Gingerbread)上运行它时,我的应用程序关闭了
但它仅适用于3.0 Honeycomb +.如何在2.3 Gingerbread +和全屏模式下使其工作.我需要帮助!
提前致谢!
堆栈跟踪
01-09 16:01:07.971 16470-16470/com.Chinmay.navigationdrawer E/AndroidRuntime? FATAL EXCEPTION: main
java.lang.NoSuchMethodError: com.Chinmay.navigationdrawer.MainActivity.getActionBar
at com.Chinmay.navigationdrawer.MainActivity.onCreate(MainActivity.java:25)
at android.app.Instrumentation.callActivityOnCreate(Instrumentation.java:1047)
at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:1615)
at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:1667)
at android.app.ActivityThread.access$1500(ActivityThread.java:117)
at android.app.ActivityThread$H.handleMessage(ActivityThread.java:935)
at android.os.Handler.dispatchMessage(Handler.java:99)
at android.os.Looper.loop(Looper.java:130)
at android.app.ActivityThread.main(ActivityThread.java:3687)
at java.lang.reflect.Method.invokeNative(Native Method)
at java.lang.reflect.Method.invoke(Method.java:507)
at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:867)
at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:625)
at dalvik.system.NativeStart.main(Native Method)
Run Code Online (Sandbox Code Playgroud) 我正在尝试在我的应用程序中实现导航抽屉.我知道它也可以在左侧和右侧制作.但它是否有可能以从顶部或底部滑入的方式实现它?
谢谢!
<android.support.v4.widget.DrawerLayout
xmlns:android="http://schemas.android.com/apk/res/android"
android:id="@+id/drawer_layout"
android:layout_width="match_parent"
android:layout_height="match_parent">
</android.support.v4.widget.DrawerLayout>
Run Code Online (Sandbox Code Playgroud) 我的应用程序使用ActionBarActivity和DrawerLayout等.我想将ActionBarDrawerToggle图标更改为自定义可绘制.
在我的代码中,我使用android.support.v7.widget.Toolbar作为SupportActionBar
这是我的代码:
toolbar.setNavigationIcon(R.drawable.lifeline_shield);
setSupportActionBar(toolbar);
ActionBar actionbar = getSupportActionBar();
actionbar.setDisplayHomeAsUpEnabled(true);
actionbar.setDisplayShowTitleEnabled(false);
mDrawerToggle = new ActionBarDrawerToggle(this, mDrawerLayout, toolbar, R.string.somestring1, R.string.somestring2) ....
Run Code Online (Sandbox Code Playgroud)
但我仍然看到汉堡图标,所以我有自己的图标打开抽屉.我怎么解决这个问题?不使用弃用的api
android android-icons android-actionbar android-navigation android-toolbar
我有一个在片段之间使用标签导航的应用程序。这些片段之一可以选择打开一个新活动。当我使用此活动中的内置设备后退按钮时,它会返回到选择了上一个片段选项卡的选项卡式活动。
我通过使用以下命令向应用程序中活动的操作栏添加了后退按钮:
getSupportActionBar().setDisplayHomeAsUpEnabled(true);
Run Code Online (Sandbox Code Playgroud)
并在清单中设置父活动,但是此按钮始终导航回到父活动的第一个标签,而不是先前可见的那个标签。
如何使此后退按钮的行为与设备的后退按钮相同?
我试图在我的APP中使用android-navigation lib,并且按照教程中的说明进行操作。我只想在我的APP中使用一个活动。我对一个问题感到困惑。有些片段只是不想要BottomNavigationView,我怎么藏起来 这是我的main_layout
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:app="http://schemas.android.com/apk/res-auto"
android:orientation="vertical" android:layout_width="match_parent"
android:layout_height="match_parent">
<com.google.android.material.appbar.AppBarLayout
android:id="@+id/appbar"
android:layout_width="match_parent"
android:layout_height="wrap_content"
app:elevation="0dp"
android:theme="@style/AppTheme.AppBarOverlay">
<androidx.appcompat.widget.Toolbar
android:id="@+id/toolbar"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:minHeight="?attr/actionBarSize"
android:fitsSystemWindows="true"
app:popupTheme="@style/AppTheme.PopupOverlay" >
</androidx.appcompat.widget.Toolbar>
</com.google.android.material.appbar.AppBarLayout>
<fragment
android:layout_width="match_parent"
android:layout_height="0dp"
android:layout_weight="1"
android:id="@+id/nav_host_fragment"
android:name="androidx.navigation.fragment.NavHostFragment"
app:defaultNavHost="true"
app:navGraph="@navigation/carkeeper_navigation"/>
<com.google.android.material.bottomnavigation.BottomNavigationView
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:id="@+id/menu_bottom_nav"
app:itemTextColor="@color/bottom_nav_title_color_selector"
app:itemIconSize="@dimen/x40"
app:menu="@menu/menu_main_bottom_nav"
app:labelVisibilityMode="labeled">
</com.google.android.material.bottomnavigation.BottomNavigationView>
Run Code Online (Sandbox Code Playgroud)
这是我的主要活动
class MainActivity : BaseActivity() {
private lateinit var navController: NavController
private lateinit var bottomNavigationView: BottomNavigationView
private lateinit var appBarConfiguration: AppBarConfiguration
override fun onCreate(savedInstanceState: Bundle?) {
super.onCreate(savedInstanceState)
setContentView(R.layout.home_activity)
navController = Navigation.findNavController(this, R.id.nav_host_fragment)
appBarConfiguration = AppBarConfiguration(navController.graph, null)
setSupportActionBar(findViewById(R.id.toolbar))
bottomNavigationView …Run Code Online (Sandbox Code Playgroud) 我正在使用导航组件,并且在主活动中有一个底部导航视图。当我点击该底部导航视图中的选项卡时,出现该片段时似乎动画淡入了。我认为我没有手动设置动画,似乎默认情况下该动画会存在。
我想删除该动画。这是我在主要活动中使用的代码。
class MainActivity : AppCompatActivity(), NavController.OnDestinationChangedListener {
private lateinit var navController : NavController
lateinit var destinationTitleTextView : TextView
lateinit var progressBar : ProgressBar
lateinit var topToolbar : Toolbar
lateinit var bottomNavigationView : BottomNavigationView
override fun onCreate(savedInstanceState: Bundle?) {
super.onCreate(savedInstanceState)
setContentView(R.layout.activity_main)
FirebaseApp.initializeApp(this)
// Initial Setup views
navController = Navigation.findNavController(this,R.id.nav_host_fragment)
setupBottomNavMenu(navController)
setupActionBar(navController)
setUpViewDeclaration()
// Add Listeners
navController.addOnDestinationChangedListener(this)
}
private fun setUpViewDeclaration() {
destinationTitleTextView = findViewById(R.id.destination_label_text_view)
progressBar = findViewById(R.id.progressBar_main_activity)
topToolbar = findViewById(R.id.top_toolbar)
bottomNavigationView = findViewById(R.id.bottom_nav)
}
private fun setupBottomNavMenu(navController: NavController) {
bottom_nav.setupWithNavController(navController) …Run Code Online (Sandbox Code Playgroud) android kotlin android-navigation android-architecture-components android-jetpack
我正在尝试在应用程序中使用Nav Component的最新更新
我可以在其中添加dialog(BottomSheetDialogFragment)nav graph
nav_version = "2.1.0-alpha05"
Run Code Online (Sandbox Code Playgroud)
来自我的部分代码nav_graph:
<dialog
android:id="@+id/settingFragment"
android:name="com.andor.navigate.notepad.listing.fragment.SettingFragment"
tools:layout="@layout/fragment_setting">
<action
android:id="@+id/action_settingFragment_to_confirmationFragment"
app:destination="@id/confirmationFragment" />
</dialog>
<dialog
android:id="@+id/confirmationFragment"
android:name="com.andor.navigate.notepad.ConfirmationFragment"
tools:layout="@layout/fragment_confirmation" />
Run Code Online (Sandbox Code Playgroud)
在我的设置片段中,我有一个button(logout_btn)来触发动作:action_settingFragment_to_confirmationFragment
OnActivityCreated设置片段中的代码:
logout_btn.setOnClickListener {
Navigation.findNavController(view!!).navigate(R.id.action_settingFragment_to_confirmationFragment)
}
Run Code Online (Sandbox Code Playgroud)
当我单击按钮时,出现运行时异常:
java.lang.IllegalStateException:查看androidx.constraintlayout.widget.ConstraintLayout {550ae09 VE ............. 1,1-719,526}在androidx.navigation.Navigation.findNavController上未设置NavController (Navigation.java:84)在com.andor.navigate.notepad.listing.fragment.SettingFragment $ onActivityCreated $ 2.onClick(SettingFragment.kt:56)在android.view.View.performClick(View.java:7352) .view.View.performClickInternal(View.java:7318)在android.view.View.access $ 3200(View.java:846)在android.view.View $ PerformClick.run(View.java:27800)在android.os android.os.Handler.dispatchMessage(Handler.java:99)位于android.os.Looper.loop(Looper.java:214)位于android.app.ActivityThread处的.Handler.handleCallback(Handler.java:873)。com.android.internal.os.RuntimeInit $ MethodAndArgsCaller.run(RuntimeInit.java:493)的java.lang.reflect.Method.invoke(本机方法)的main(ActivityThread.java:7045) os.ZygoteInit.main(ZygoteInit.java:965)
我的目的是从另一个对话框打开一个对话框,但是由于某种原因,我的对话框没有(缺少)NavController。
我已经提到了源代码
android kotlin android-navigation android-architecture-navigation androidx
我已经连接了我的菜单 xml 和 Android 导航组件navigation_view.setupWithNavController(navController),一切正常。我的菜单的一部分是注销选项。如果用户选择此导航目的地,应用程序应导航到AuthorizationFragment 并将返回堆栈弹出到此 Fragment 并将 inclusive 设置为 true以删除所有先前的Fragment。
我查看了导航库的代码,并达到了应该发生这种情况的地步:
NavigationUI.onNavDestinationSelected():
/**
* Attempt to navigate to the {@link NavDestination} associated with the given MenuItem. This
* MenuItem should have been added via one of the helper methods in this class.
*
* <p>Importantly, it assumes the {@link MenuItem#getItemId() menu item id} matches a valid
* {@link NavDestination#getAction(int) action id} or
* {@link NavDestination#getId() destination id} to be navigated to.</p>
* <p> …Run Code Online (Sandbox Code Playgroud) android navigation-drawer android-navigation android-navigationview android-jetpack
android ×9
kotlin ×2
android-architecture-components ×1
android-architecture-navigation ×1
androidx ×1