Android嵌套ViewModel与导航控制器
创始人
2024-10-09 15:35:26
0

要实现Android中的嵌套ViewModel与导航控制器,可以按照以下步骤进行操作:

  1. 首先,在项目的build.gradle文件中添加以下依赖项:
implementation "androidx.lifecycle:lifecycle-viewmodel-ktx:2.3.1"
implementation "androidx.navigation:navigation-fragment-ktx:2.3.5"
implementation "androidx.navigation:navigation-ui-ktx:2.3.5"
  1. 在布局文件中创建一个NavHostFragment来承载导航控制器的主要视图。例如,创建一个名为nav_host_fragmentFrameLayout

  1. MainActivity中初始化导航控制器和ViewModel。在onCreate方法中添加以下代码:
class MainActivity : AppCompatActivity() {
    private lateinit var navController: NavController
    private lateinit var viewModel: MainViewModel

    override fun onCreate(savedInstanceState: Bundle?) {
        super.onCreate(savedInstanceState)
        setContentView(R.layout.activity_main)

        val navHostFragment = supportFragmentManager.findFragmentById(R.id.nav_host_fragment) as NavHostFragment
        navController = navHostFragment.navController

        viewModel = ViewModelProvider(this).get(MainViewModel::class.java)
    }
}
  1. 创建一个ViewModel类,用于保存嵌套导航的相关数据。例如,创建一个名为MainViewModel的类:
class MainViewModel : ViewModel() {
    private val _selectedItemId = MutableLiveData()
    val selectedItemId: LiveData get() = _selectedItemId

    fun setSelectedItemId(itemId: Int) {
        _selectedItemId.value = itemId
    }
}
  1. NavGraph中定义嵌套导航。在res/navigation目录中创建一个名为nav_graph.xml的文件,并添加以下内容:


    
        
    

    
    

  1. HomeFragment中使用ViewModel来处理导航操作。例如,在HomeFragment的点击事件中添加以下代码:
class HomeFragment : Fragment() {
    private val viewModel: MainViewModel by activityViewModels()

    override fun onCreateView(inflater: LayoutInflater, container: ViewGroup?, savedInstanceState: Bundle?): View? {
        // Inflate the layout for this fragment
        val view = inflater.inflate(R.layout.fragment_home, container, false)

        view.button.setOnClickListener {
            viewModel.setSelectedItemId(R.id.action_homeFragment_to_detailFragment)
        }

        return view
    }
}
  1. MainActivity中设置导航控制器的监听器,以便在ViewModel中的数据更改时执行相应的导航操作。例如,在onCreate方法中添加以下代码:
class MainActivity : AppCompatActivity() {

    // ...

    override fun onCreate(savedInstanceState: Bundle?) {
        // ...

        viewModel.selectedItemId.observe(this, { itemId ->
            itemId?.let {
                navController.navigate(it)
            }
        })
    }
}

通过以上步骤,你就可以在Android中实现嵌套ViewModel与导航控制器了。点击HomeFragment中的按钮时,会将选定的导航目标ID设置到ViewModel中,然后通过MainActivity中的导航控制器进行相应的导航操作。

相关内容

热门资讯

不少玩家反映!衢州都莱辅助器免... 不少玩家反映!衢州都莱辅助器免费下载!好像确实有开挂辅助挂(有挂教学)-哔哩哔哩1、用户打开应用后不...
教学辅助挂!透视辅助工具!原来... 教学辅助挂!透视辅助工具!原来真的有开挂辅助app(有挂分析)-哔哩哔哩1、透视辅助工具免费辅助多个...
做出回应!仙桃晃晃辅助器!其实... 做出回应!仙桃晃晃辅助器!其实是真的有开挂辅助教程(新版有挂)-哔哩哔哩1、许多玩家不知道仙桃晃晃辅...
值得注意的是!决战卡五星最新辅... 值得注意的是!决战卡五星最新辅助!真是确实有开挂辅助方法(证实有挂)-哔哩哔哩1、值得注意的是!决战...
黑科技攻略!浙江宝宝游戏辅助器... 黑科技攻略!浙江宝宝游戏辅助器是真的嘛!真是真的是有开挂辅助脚本(有挂秘诀)-哔哩哔哩1、打开软件启...
刚刚!余干五十k攻略!切实确实... 刚刚!余干五十k攻略!切实确实有开挂辅助教程(竟然有挂)-哔哩哔哩1、超多福利:超高返利,海量正版游...
2026版攻略!川南九九辅助!... 2026版攻略!川南九九辅助!一直确实有开挂辅助攻略(有挂解密)-哔哩哔哩1)川南九九辅助免费钻石:...
此事迅速冲上热搜!哥哥打大a有... 此事迅速冲上热搜!哥哥打大a有没有辅助!一贯是真的有开挂辅助脚本(有挂秘籍)-哔哩哔哩1、该软件可以...
2026版规律!约局吧透视辅助... 2026版规律!约局吧透视辅助ios下载!一直真的有开挂辅助技巧(今日头条)-哔哩哔哩约局吧透视辅助...
2026版辅助挂!胡乐辅助脚本... 2026版辅助挂!胡乐辅助脚本是真的假的!切实真的是有开挂辅助app(有挂透视)-哔哩哔哩进入游戏-...