setOnNavigationItemSelectedListener, кажется, не работает для меня - PullRequest
0 голосов
/ 26 января 2020

Это работало отлично, я не знаю, где я испортил ...

У меня есть 5 пунктов в моем нижнем меню навигации, и оно всегда помечено / установлено / выделено / выбрано на домашнем задании (0) всякий раз, когда я нажимаю, скажем, ProfileActivity (4), он устанавливает его как выбранный всего на секунду, а затем выбор возвращается к домашнему заданию (0), но экран остается на задании, которое я хотел.

Вот нижняя навигация:

AppBottomNavigation.kt

    class AppBottomNavigation(private val bnv: BottomNavigationViewEx,
                          private val navNumber: Int,
                          activity: Activity): LifecycleObserver {

    @OnLifecycleEvent(Lifecycle.Event.ON_RESUME)
    fun onResume() {
        bnv.menu.getItem(navNumber).isChecked = true
    }

    init {
        bnv.setIconSize(29f, 29f)
        bnv.setTextVisibility(false)
        bnv.enableItemShiftingMode(false)
        bnv.enableShiftingMode(false)
        bnv.enableAnimation(false)
        for (i in 0 until bnv.menu.size()) {
            bnv.setIconTintList(i, null)
        }
        bnv.setOnNavigationItemSelectedListener {
            val nextActivity =
                when (it.itemId) {
                    R.id.nav_item_home -> MainActivity::class.java
                    R.id.nav_item_search -> SearchActivity::class.java
                    R.id.nav_item_share -> ShareActivity::class.java
                    R.id.nav_item_likes -> LikesActivity::class.java
                    R.id.nav_item_profile -> ProfileActivity::class.java
                    else -> {
                        Log.e(BaseActivity.TAG, "unknown nav item clicked $it")
                        null
                    }
                }
            if (nextActivity != null) {
                val intent = Intent(activity, nextActivity)
                intent.flags = Intent.FLAG_ACTIVITY_NO_ANIMATION
                activity.startActivity(intent)
                activity.overridePendingTransition(0, 0)
                true
            } else {
                false
            }
        }
    }
}

fun BaseActivity.setupBottomNavigation(navNumber: Int){
    AppBottomNavigation(bottom_navigation_view, navNumber,this)
}

Вот MainActivity.kt просто как пример того, как я назвал нижнюю навигацию в действиях:

class MainActivity : BaseActivity(), FeedAdapter.Listener {
private lateinit var mAdapter: FeedAdapter
private val TAG = "MainActivity"
private lateinit var mFirebase: FirebaseHelper
private var mLikesListeners: Map<String, ValueEventListener> = emptyMap()


override fun onCreate(savedInstanceState: Bundle?) {
    super.onCreate(savedInstanceState)
    setContentView(R.layout.activity_home)
    Log.d(TAG, "onCreate")
    setupBottomNavigation(0)

1 Ответ

0 голосов
/ 26 января 2020

Сначала создайте BottomNavigationViewHolder класс как

public class BottomNavigationViewHolder  {

    public static void setupBottomNavigationView(BottomNavigationViewEx bottomNavigationViewEx) {
        bottomNavigationViewEx.enableAnimation(false);
        bottomNavigationViewEx.enableItemShiftingMode(false);
        bottomNavigationViewEx.enableShiftingMode(false);
    }

    public static void enableNavigation(final Context context, BottomNavigationView view) {
        view.setOnNavigationItemSelectedListener(new BottomNavigationView.OnNavigationItemSelectedListener() {
            @Override
            public boolean onNavigationItemSelected(@NonNull MenuItem menuItem) {
                switch(menuItem.getItemId()) {

                    case R.id.activity_0:
                        Intent intent0 = new Intent(context, PostsActivity.class);
                        intent0.setFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP | Intent.FLAG_ACTIVITY_SINGLE_TOP);
                        context.startActivity(intent0);
                        break;

                    case R.id.activity_1:
                        Intent intent1 = new Intent(context, GuessHomeActivity.class);
                        context.startActivity(intent1);
                        break;

                    case R.id.activity_2:
                        Intent intent4 = new Intent(context, SendReceivedActivity.class);
                        context.startActivity(intent4);
                        break;

                    case R.id.activity_3:
                        Intent intent3 = new Intent(context, ProfileActivity.class);
                        context.startActivity(intent3);
                        break;
                }

                return true;
            }
        });
    }
}


Затем настройте эту навигацию для каждого действия

И нумеруйте свои действия как private Static final int ACTIVITY_NUM = 0 в первом действии и т. д. до последнего занятия

private void setupBottomNavigationView() {
        BottomNavigationViewEx bottomNavigationView = (BottomNavigationViewEx) findViewById(R.id.bottomNavViewBar);
        BottomNavigationViewHolder.setupBottomNavigationView(bottomNavigationView);
        BottomNavigationViewHolder.enableNavigation(this,bottomNavigationView);
        Menu menu = bottomNavigationView.getMenu();
        MenuItem menuItem = menu.getItem(ACTIVITY_NUM);
        menuItem.setChecked(true);
    }
...