我正在尝试在我的应用程序中使用bottomNavigation。现在,我想将其中一个类从java移到kotlin,在这个类中,我具有bottomNavigation菜单用于导航。在Java中,我有这样的监听器:
bottomNavigationView.setOnNavigationItemSelectedListener(menuItem -> {
FragmentTransaction transaction = getSupportFragmentManager().beginTransaction();
Bundle bundle = new Bundle();
switch (menuItem.getItemId()) {
case R.id.full_jobAgent:
Objects.requireNonNull(getSupportActionBar()).show();
JobList jobList = new JobList();
bundle.putInt("offset", 1);
jobList.setArguments(bundle);
textViewTitle.setText("Jobagent");
tvSubTitle.setText(R.string.all_jobs);
textViewTitle.setTypeface(custom_font);
tvSubTitle.setTypeface(custom_font);
disableShowHideAnimation(getSupportActionBar());
transaction.replace(R.id.contentContainer, jobList).addToBackStack(null).commit();
return true;
case R.id.received_mess:
disableShowHideAnimation(getSupportActionBar());
Objects.requireNonNull(getSupportActionBar()).show();
MessageList messageList = new MessageList();
bundle.putInt("type1", 0);
messageList.setArguments(bundle);
transaction.replace(R.id.contentContainer, messageList).addToBackStack(null).commit();
textViewTitle.setTypeface(custom_font);
tvSubTitle.setTypeface(custom_font);
textViewTitle.setText(R.string.title_activity_message_center);
tvSubTitle.setText(R.string.received);
return true;
case R.id.home_screen:
disableShowHideAnimation(getSupportActionBar());
Objects.requireNonNull(getSupportActionBar()).hide();
transaction.replace(R.id.contentContainer, new PersonalData()).addToBackStack(null).commit();
return true;
case R.id.more:
disableShowHideAnimation(getSupportActionBar());
textViewTitle.setText(R.string.more_bottom_nav);
textViewTitle.setTypeface(custom_font);
tvSubTitle.setVisibility(View.GONE);
Objects.requireNonNull(getSupportActionBar()).show();
transaction.replace(R.id.contentContainer, new MoreScreen()).addToBackStack(null).commit();
return true;
case R.id.notespec:
disableShowHideAnimation(getSupportActionBar());
textViewTitle.setText(R.string.notepad_bottom_nav);
textViewTitle.setTypeface(custom_font);
tvSubTitle.setVisibility(View.GONE);
Objects.requireNonNull(getSupportActionBar()).show();
transaction.replace(R.id.contentContainer, new TestNotepadFragment()).addToBackStack(null).commit();
return true;
}
return false;
});
我已将此方法重写为kotlin:
private val mOnNavigationItemSelectedListener = BottomNavigationView.OnNavigationItemSelectedListener { item ->
val transaction = supportFragmentManager.beginTransaction()
val bundle = Bundle()
when (item.itemId) {
R.id.full_jobAgent -> {
ms.filter_data = HashMap<String, String>()
disableShowHideAnimation(supportActionBar!!)
val jobList = JobList()
bundle.putInt("offset", 1)
if (intent.getSerializableExtra("filter_data") != null) {
bundle.putSerializable("filter_data", intent.getSerializableExtra("filter_data"))
}
bottomNavigationView.selectedItemId = R.id.full_jobAgent
transaction.replace(R.id.contentContainerT, jobList).addToBackStack(null).commit()
textSetter("Jobagent", resources.getString(R.string.all_jobs))
//return@OnNavigationItemSelectedListener true
}
R.id.received_mess -> {
disableShowHideAnimation(supportActionBar!!)
supportActionBar!!.show()
val messageList = MessageList()
bundle.putInt("type1", 0)
messageList.arguments = bundle
textSetter(resources.getString(R.string.title_activity_message_center), resources.getString(R.string.received))
transaction.replace(R.id.contentContainerT, messageList).addToBackStack(null).commit()
//return@OnNavigationItemSelectedListener true
}
R.id.home_screen -> {
disableShowHideAnimation(supportActionBar!!)
supportActionBar!!.hide()
transaction.replace(R.id.contentContainerT, PersonalData()).addToBackStack(null).commit()
//return@OnNavigationItemSelectedListener true
}
R.id.notespec -> {
disableShowHideAnimation(supportActionBar!!)
supportActionBar!!.show()
textSetter(resources.getString(R.string.more_bottom_nav), "")
transaction.replace(R.id.contentContainerT, NotepadScr()).addToBackStack(null).commit()
//return@OnNavigationItemSelectedListener true
}
R.id.more ->{
disableShowHideAnimation(supportActionBar!!)
supportActionBar!!.show()
textSetter(resources.getString(R.string.more_bottom_nav),"")
transaction.replace(R.id.contentContainerT,MoreScreen()).addToBackStack(null).commit()
//return@OnNavigationItemSelectedListener true
}
}
false
}
,我的应用开始崩溃。我发现问题出在这里:
return@OnNavigationItemSelectedListener true
有些人会问我我的应用程序日志,但是我无法从logcat中获取它们,因为它重新加载的非常快。所以...在java,我们不必选择所选的项目,但是在kotlin,当我删除错误的选择行时,我现在看不到选择了哪个项目。也许我做错了吗?
答案 0 :(得分:1)
navigation.setOnNavigationItemSelectedListener(this)
override fun onNavigationItemSelected(item: MenuItem): Boolean {
when (item.itemId) {
R.id.navigation_catalog -> {
swapFragments(item.itemId, "Catalog")
return true
}
R.id.navigation_shopping_cart -> {
swapFragments(item.itemId, "ShoppingCart")
return true
}
R.id.navigation_account -> {
swapFragments(item.itemId, "Account")
return true
}
}
return false
}
private fun swapFragments(@IdRes actionId: Int, key: String) {
if (supportFragmentManager.findFragmentByTag(key) == null) {
savedFragmentState(actionId)
createFragment(key, actionId)
}
}
private fun savedFragmentState(actionId: Int) {
val currentFragment = supportFragmentManager.findFragmentById(R.id.fragment_home)
if (currentFragment != null) {
savedStateSparseArray.put(currentSelectItemId,
supportFragmentManager.saveFragmentInstanceState(currentFragment)
)
}
currentSelectItemId = actionId
}
private fun createFragment(key: String, actionId: Int) {
when (actionId) {
R.id.navigation_catalog -> {
val fragment = CatalogFragment.newInstance(key)
fragment.setInitialSavedState(savedStateSparseArray[actionId])
supportFragmentManager.beginTransaction()
.replace(R.id.fragment_home, fragment, key)
.commit()
}
R.id.navigation_shopping_cart -> {
val fragment = ShoppingcartFragment.newInstance(key)
fragment.setInitialSavedState(savedStateSparseArray[actionId])
supportFragmentManager.beginTransaction()
.replace(R.id.fragment_home, fragment, key)
.commit()
}
R.id.navigation_account -> {
val fragment = AccountFragment.newInstance(key)
fragment.setInitialSavedState(savedStateSparseArray[actionId])
supportFragmentManager.beginTransaction()
.replace(R.id.fragment_home, fragment, key)
.commit()
}
}
}