android - 如何点击导航选项
问题描述
我的目标是通过使用导航栏,我可以使用应用程序的其他页面。我可以通过单击导航栏来更改页面并到达相应的页面。
我期待这个目标,但实际结果如下。通过使用菜单选项,我无法在导航栏的帮助下使用或移动到该页面。通过单击该选项,我无法访问相应的页面。
我没有认识到这背后的确切错误。这是导航栏,我无法单击“我的商城”或“我的订单”或“我的购物车”等选项:
这是我的代码。我怎样才能找到错误?
package com.example.mycart;
import android.os.Bundle;
import android.view.MenuItem;
import android.view.View;
import android.view.Menu;
import android.widget.FrameLayout;
import android.widget.ImageView;
import com.google.android.material.floatingactionbutton.FloatingActionButton;
import com.google.android.material.snackbar.Snackbar;
import com.google.android.material.navigation.NavigationView;
import androidx.annotation.NonNull;
import androidx.core.view.GravityCompat;
import androidx.fragment.app.Fragment;
import androidx.fragment.app.FragmentTransaction;
import androidx.navigation.NavController;
import androidx.navigation.Navigation;
import androidx.navigation.ui.AppBarConfiguration;
import androidx.navigation.ui.NavigationUI;
import androidx.drawerlayout.widget.DrawerLayout;
import androidx.appcompat.app.AppCompatActivity;
import androidx.appcompat.widget.Toolbar;
import androidx.recyclerview.widget.RecyclerView;
public class MainActivity extends AppCompatActivity
implements NavigationView.OnNavigationItemSelectedListener {
private AppBarConfiguration mAppBarConfiguration;
private FrameLayout frameLayout;
private static final int HOME_FRAGMENT = 0 ;
private static final int CART_FRAGMENT = 1 ;
private static final int ORDERS_FRAGMENT = 2 ;
private static int currentFragment = -1 ;
private NavigationView navigationView ;
private ImageView actionBarLogo ;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
Toolbar toolbar = findViewById(R.id.toolbar);
actionBarLogo = findViewById(R.id.actionbar_logo);
setSupportActionBar(toolbar);
FloatingActionButton fab = findViewById(R.id.fab);
fab.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View view) {
Snackbar.make(view, "Replace with your own action", Snackbar.LENGTH_LONG)
.setAction("Action", null).show();
}
});
DrawerLayout drawer = findViewById(R.id.drawer_layout);
navigationView = findViewById(R.id.nav_view);
// Passing each menu ID as a set of Ids because each
// menu should be considered as top level destinations.
mAppBarConfiguration = new AppBarConfiguration.Builder(
R.id.nav_home, R.id.nav_gallery, R.id.nav_slideshow)
.setDrawerLayout(drawer)
.build();
NavController navController = Navigation.findNavController(this, R.id.nav_host_fragment);
NavigationUI.setupActionBarWithNavController(this, navController, mAppBarConfiguration);
NavigationUI.setupWithNavController(navigationView, navController);
navigationView.getMenu().getItem(0).setChecked(true);
frameLayout = findViewById(R.id.main_framelayout);
setFragment(new HomeFragment(),HOME_FRAGMENT);
}
@Override
public boolean onCreateOptionsMenu(Menu menu) {
// Inflate the menu; this adds items to the action bar if it is present.
if(currentFragment == HOME_FRAGMENT) {
getSupportActionBar().setDisplayShowTitleEnabled(false);
getMenuInflater().inflate(R.menu.main,menu);
}
return true;
}
@Override
public boolean onOptionsItemSelected(@NonNull MenuItem item) {
int id=item.getItemId();
if (id == R.id.main_search_icon){
// todo : search
return true;
}
else if (id == R.id.main_notification_icon){
// todo : notification
return true;
}
else if(id == R.id.main_cart_icon){
gotoFragment("My Cart", new MyCartFragment(),CART_FRAGMENT);
return true;
}
return super.onOptionsItemSelected(item);
}
private void gotoFragment(String title,Fragment fragment,int fragmentNo) {
actionBarLogo.setVisibility(View.GONE);
getSupportActionBar().setDisplayShowTitleEnabled(true);
getSupportActionBar().setTitle(title);
invalidateOptionsMenu();
setFragment(fragment, fragmentNo);
if (fragmentNo == CART_FRAGMENT) {
navigationView.getMenu().getItem(3).setChecked(true);
}
}
@Override
public boolean onNavigationItemSelected(MenuItem item) {
int id = item.getItemId();
if(id==R.id.nav_my_mall)
{
actionBarLogo.setVisibility(View.VISIBLE);
invalidateOptionsMenu();
setFragment(new HomeFragment(),HOME_FRAGMENT);
}
else if(id==R.id.nav_my_orders)
{
gotoFragment("My Orders", new MyOrdersFragment(), ORDERS_FRAGMENT);
}
else if(id==R.id.nav_my_rewards)
{
}
else if(id==R.id.nav_my_cart)
{
gotoFragment("My Cart", new MyCartFragment(),CART_FRAGMENT);
}
else if(id==R.id.nav_my_wishlist)
{
}
else if(id==R.id.nav_my_account)
{
}
else if(id==R.id.nav_sign_out)
{
}
DrawerLayout drawer = (DrawerLayout)findViewById(R.id.drawer_layout);
drawer.closeDrawer(GravityCompat.START);
return true;
}
@Override
public boolean onSupportNavigateUp(){
NavController navController = Navigation.findNavController(this, R.id.nav_host_fragment);
return NavigationUI.navigateUp(navController, mAppBarConfiguration)
|| super.onSupportNavigateUp();
}
private void setFragment(Fragment fragment,int fragmentNo) {
if (fragmentNo != currentFragment) {
currentFragment = fragmentNo;
FragmentTransaction fragmentTransaction = getSupportFragmentManager().beginTransaction();
fragmentTransaction.setCustomAnimations(R.anim.fade_in, R.anim.fade_out);
fragmentTransaction.replace(frameLayout.getId(), fragment);
fragmentTransaction.commit();
}
}
}
解决方案
您需要将用户导航到 中的其他片段, onNavigationItemSelected
并且我可以看到您尚未在代码中处理此问题,因此条件为空。
推荐阅读
- ajax - 将数据从 ajax 传递到 asp.net 核心
- javascript - 在 GCP App Engine 上部署 NodeJS Express 应用程序时出现服务器错误 500
- javascript - 使用 ECharts 中的 HTML 按钮激活/停用图表线?
- python - 如何从不同的字符串中获取值(python)
- javascript - Javascript 错误 - Touchstart - [违规] 向阻止滚动的“touchstart”事件添加了非被动事件侦听器
- java - Java 中的“ClassName.class”是否与 Kotlin 中的“[ClassName::class]”相同?
- django - 使用ajax保存django变量
- python - 在 Pandas 中,.loc 不返回指定的行
- python - 寻路 Python 算法回溯
- django - 如果使用相同的参数创建新任务,Celery 会撤销旧任务