首页 > 解决方案 > 项目单击执行方法上的导航抽屉

问题描述

在导航抽屉中,我有一个注销项目,当我单击它时,我调用了一个注销方法,但它没有执行此方法中的任何代码。

这是注销方法,第一个 system.out.println 确实出现在控制台中,但 onClick 内的那个没有

    public void logout() {
        System.out.println("inside logout method");
        logoutBtn.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {

                System.out.println("inside logout onclick");
                Call<Void> call = apiInterface.LogoutUser();

                call.enqueue(new Callback<Void>() {
                    @Override
                    public void onResponse(Call<Void> call, Response<Void> response) {
                        if (!response.isSuccessful()) {
                            FancyToast.makeText(MainActivity.this,
                                    "Ha sucedido un error, intente de nuevo.",
                                    FancyToast.LENGTH_SHORT, FancyToast.CONFUSING,
                                    R.drawable.error_outline, false).show();
                            return;
                        }
                        SharedPreferencesHelper.removeUser(MainActivity.this);

                        Intent i = new Intent(MainActivity.this, LoginActivity.class);
                        i.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK | Intent.FLAG_ACTIVITY_CLEAR_TASK);
                        startActivity(i);

                    }

                    @Override
                    public void onFailure(Call<Void> call, Throwable t) {
                        FancyToast.makeText(MainActivity.this,
                                "Ha sucedido un error, intente de nuevo.",
                                FancyToast.LENGTH_SHORT, FancyToast.CONFUSING,
                                R.drawable.error_outline, false).show();
                        return;
                    }
                });


            }
        });

这就是我要调用它的地方,当我点击它时,我确实收到了 Toast 消息

    @Override
    public boolean onNavigationItemSelected(@NonNull MenuItem item) {
        switch (item.getItemId()) {
            case R.id.nav_calendar:
                getSupportFragmentManager().beginTransaction()
                    .replace(R.id.fragment_container, new CalendarFragment()).commit();
                break;
            case R.id.nav_survey:
                getSupportFragmentManager().beginTransaction()
                    .replace(R.id.fragment_container, new SurveyFragment()).commit();
                break;
            case R.id.nav_forum:
                getSupportFragmentManager().beginTransaction()
                    .replace(R.id.fragment_container, new ForumFragment()).commit();
                break;
            case R.id.nav_logout:
                logout();
                FancyToast.makeText(MainActivity.this,
                        "item clicked.",
                        FancyToast.LENGTH_SHORT, FancyToast.CONFUSING,
                        R.drawable.error_outline, false).show();
                break;
        }

        drawer.closeDrawer(GravityCompat.START);
        return true;
    }

我究竟做错了什么?

标签: android

解决方案


基本上 logoutBtn.setOnClickListener() 不会被触发,因为您在单击 nav_logout 时只是在初始化 onClickListener。

如果要初始化并单击 logout() 中的 logoutBtn。

然后在 logoutBtn.setOnClickListener() 方法之后添加 logoutBtn.perfomClick();


推荐阅读