android - 项目单击执行方法上的导航抽屉
问题描述
在导航抽屉中,我有一个注销项目,当我单击它时,我调用了一个注销方法,但它没有执行此方法中的任何代码。
这是注销方法,第一个 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;
}
我究竟做错了什么?
解决方案
基本上 logoutBtn.setOnClickListener() 不会被触发,因为您在单击 nav_logout 时只是在初始化 onClickListener。
如果要初始化并单击 logout() 中的 logoutBtn。
然后在 logoutBtn.setOnClickListener() 方法之后添加 logoutBtn.perfomClick();
推荐阅读
- qt - Qt 进度条 - 显示双精度值
- regex - 匹配电子邮件正文中的内联 base64 流时发生灾难性回溯
- java - RestTemplate postForObject 方法返回 List
- php - 日历事件仅在第二次尝试后创建
- python - 在 Python 中使用 Selenium 计算页面中单选按钮的数量
- javascript - 在 Gatsby 上加载(StaticQuery)白屏
- asp.net-core - Request.HttpContext.Features.Get
() 总是返回 null - python - 图书馆如何在 django 托管网站中工作?
- azure - 在 Azure Blob 存储上创建 Snowpipe
- sql - 查找具有特殊条件的数据库中的字段数