GVKun编程网logo

vue报错vue-router.esm.js?8c4f:2007 Uncaught (in promise) NavigationDuplicated {_name: "Navigat...

9

对于想了解vue报错vue-router.esm.js?8c4f:2007Uncaught(inpromise)NavigationDuplicated{_name:"Navigat...的读者,本文

对于想了解vue报错vue-router.esm.js?8c4f:2007 Uncaught (in promise) NavigationDuplicated {_name: "Navigat...的读者,本文将是一篇不可错过的文章,并且为您提供关于android – NavigationView OnNavigationItemSelectedListener未被调用、android – 哪一个使用NavUtils.navigateUpFromSameTask()与onBackPressed()、android.support.design.widget.BottomNavigationView.OnNavigationItemSelectedListener的实例源码、android.support.design.widget.NavigationView.OnNavigationItemSelectedListener的实例源码的有价值信息。

本文目录一览:

vue报错vue-router.esm.js?8c4f:2007 Uncaught (in promise) NavigationDuplicated {_name:

今天在写vue项目配置好路由点击菜单时,突然在控制台报错。

错误信息如下:

Uncaught (in promise) NavigationDuplicated {_name: "NavigationDuplicated", name: "NavigationDuplicated"};

错误截图:

 

经过一个半小时研究版本,又重新查看了路由的运行机制。得到了解决方案。

 

解决方法一:经过多次尝试发现原因可能是 在重新下载依赖包时,安装的vue-router还是之前出错的那个版本,

                      解决方法也很简单,在项目目录下运行 npm i vue-router@3.0 -S 即可。

解决方法二:如果你不想用方法一那就在 main.js里添加一段代码。

 

代码如下:

import Router from ''vue-router''
const routerPush = Router.prototype.push
Router.prototype.push = function push(location) {
  return routerPush.call(this, location).catch(error=> error)
}

 

 

  

 

  亲测有效,如有其他问题可以联系我,谢谢。

  

 

 

android – NavigationView OnNavigationItemSelectedListener未被调用

我试图在我的应用程序中使用来自 Android支持设计库的NavigationView.由于某些原因OnNavigationItemSelected监听器未被调用.这是我的代码 @H_301_2@活动布局

<android.support.design.widget.NavigationView
    android:id="@+id/navigation_view"
    android:layout_width="wrap_content"
    android:layout_height="match_parent"
    android:layout_gravity="start"
    app:headerLayout="@layout/drawer_header"
    app:menu="@menu/drawer_menu" />

        <FrameLayout
            android:id="@+id/content_frame"
            android:layout_width="match_parent"
            android:layout_height="match_parent" />
@H_301_2@活动onCreate()

@Override
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(getLayoutID());

    toolbar = (Toolbar) findViewById(R.id.activity_toolbar);
    setSupportActionBar(toolbar);
    toolbar.inflateMenu(R.menu.common_menu);
    final ActionBar actionBar = getSupportActionBar();
    if (actionBar != null) {
        actionBar.setHomeAsUpIndicator(R.drawable.ic_menu_white_24dp);
        actionBar.setdisplayHomeAsUpEnabled(true);
    }

    drawerLayout = (DrawerLayout) findViewById(R.id.drawer_layout);
    navigationView = (NavigationView) findViewById(R.id.navigation_view);
    navigationView.setNavigationItemSelectedListener(new NavigationView.OnNavigationItemSelectedListener() {
        @Override
        public boolean onNavigationItemSelected(final MenuItem menuItem) {
            Snackbar.make(contentLayout,menuItem.getTitle() + " pressed",Snackbar.LENGTH_LONG).show();
            menuItem.setChecked(true);
            // allow some time after closing the drawer before performing real navigation
            // so the user can see what is happening
            drawerLayout.closeDrawer(GravityCompat.START);
            mDrawerActionHandler.postDelayed(new Runnable() {
                @Override
                public void run() {
                    navigate(menuItem.getItemId());
                }
            },DRAWER_CLOSE_DELAY_MS);
            drawerLayout.closeDrawers();
            return true;
        }

    });
    usernameTextView = (TextView) findViewById(R.id.drawer_header_username);                  
    usernameTextView.setText(getAppDContext().getAccount().getUsername());
   }

解决方法

当你做一个xml时,你应该在BaseLayout(FrameLayout,LinearLayout等)之后写下NavigationView
<DrawerLayout>
    <FrameLayout />
    <NavigationView />
</DrawerLayout>

android – 哪一个使用NavUtils.navigateUpFromSameTask()与onBackPressed()

android – 哪一个使用NavUtils.navigateUpFromSameTask()与onBackPressed()

我有两个活动A和B.A有一个使用LoaderManager的ListFragment,而B活动显示有关在A的ListFragment中选择的项目的详细信息.我刚刚注意到,当我使用后退按钮从B返回到A时,ListFragment中的位置保留,但是当我在操作栏中使用向上按钮(左点插入符号)时,A活动重新创建,因此列表视图中的位置将丢失.

我想解决这个问题,但我不确定如何做到这一点的最好方法.

我想出了这个解决方案:

a)使用onBackpressed()

替换B活动中android.R.id.home(向上操作栏按钮)的默认实现,而不是NavUtils.navigateUpFromSaMetask(this)函数调用onBackpressed()活动方法.我测试了它,它的工作原理.

b)继续使用NavUtils.navigateUpFromSaMetask(this)

但是在A活动使用的ListFragment的onCreate方法期间实现onSaveInstanceState并恢复listView位置. (我还没有测试过这种方法)

哪种解决方案更好?或者还有其他(更好的)解决方案吗?

解决方案a)非常简单直接,但b)可能更好,因为使用了up caret的默认实现.

欢迎任何想法.谢谢.

解决方法:

解决方案c是正确的选择.首先,解释问题的解释a.

在Activity中有两个后退按钮绝对没有意义.此外,选项a实际上打破了向上按钮.向上按钮的目的是为用户提供一种方式,让他们在从外部来源登陆您的应用时留在您的应用中.例如,如果您从外部活动C登陆活动B,并且如果您使用选项a,则在活动B中按“向上”将导致显示活动C.您希望的行为是显示活动A.

如您所见,解决方案b在正确的轨道上.你肯定想要升级到A而不是回到C.但是,简单地将状态存储在onSaveInstanceState中将不会导致保留状态.这是因为如果您的应用程序可能被系统杀死,则仅调用onSaveInstanceState.如果您的应用程序是手动销毁的,则无法保证调用它,并且在创建Activity的新实例时肯定不会调用它.如果Intent启动一个新活动,那么它将不会从其他活动恢复其状态.

那么,解决方案是,您必须将任何持久性写入共享首选项文件(或自定义持久备用文件).执行此操作时,您可以保证活动的所有实例在多个任务中共享相同的状态,只要它们的onResume(或您恢复状态的任何位置)被调用即可.要么:

如果您确切知道导航如何工作,则可以通过使用Intent标志和Activity任务关联性的组合来避免将所有内容写入持久状态.如果您想要使用相同的活动,即使您从外部源导航到应用程序,那么您可以将活动A的亲和力保留为默认值(链接到应用程序)并使用类似Intent.FLAG_ACTIVITY_CLEAR_TOP的内容.

就个人而言,我首先尝试Intent标志方法,然后再次尝试继续写入状态.如果你可以避免它,你真的不希望滚动位置坐在持久存储上.

android.support.design.widget.BottomNavigationView.OnNavigationItemSelectedListener的实例源码

android.support.design.widget.BottomNavigationView.OnNavigationItemSelectedListener的实例源码

项目:SpaceMaterial    文件:MainActivity.java   
private void initViews() {
    // Bottom bar
    BottomNavigationView bottomNavigationView = findById(this,bottom_navigation_view);
    bottomNavigationView.setonNavigationItemSelectedListener(new OnNavigationItemSelectedListener() {
        @Override
        public boolean onNavigationItemSelected(@NonNull MenuItem item) {
            switch (item.getItemId()) {
                case R.id.tab_iss_location:
                    contentViewPager.setCurrentItem(ISS_LOCATION_FRAGMENT_POSITION,false);
                    break;
                case R.id.tab_people_in_space:
                    contentViewPager.setCurrentItem(PEOPLE_IN_SPACE_FRAGMENT_POSITION,false);
                    break;
                case R.id.tab_iss_pass_times:
                    contentViewPager.setCurrentItem(ISS_PASS_TIMES_FRAGMENT_POSITION,false);
                    break;
            }
            return true;
        }
    });

    // ViewPager
    FragmentPagerAdapter mainPagerAdapter = new MainPagerAdapter(getSupportFragmentManager());
    contentViewPager.setAdapter(mainPagerAdapter);
}

android.support.design.widget.NavigationView.OnNavigationItemSelectedListener的实例源码

android.support.design.widget.NavigationView.OnNavigationItemSelectedListener的实例源码

项目:mdsimpleNotes    文件:MainActivity.java   
private void setupDrawerContent(NavigationView navigationView) {
    navigationView.setNavigationItemSelectedListener(new OnNavigationItemSelectedListener() {

        @Override
        public boolean onNavigationItemSelected(MenuItem menuItem) {
            menuItem.setChecked(true);
            mDrawerLayout.closeDrawers();
            switch (menuItem.getItemId()) {
                case R.id.navItem1:
                    Intent alarm = new Intent(AlarmClock.ACTION_SET_ALARM);
                    startActivity(alarm);
                    break;
                case R.id.navItem2:
                    try {
                        export();
                    } catch (IOException e) {
                        e.printstacktrace();
                    }
                    break;
            }
            return false;
        }
    });
}
项目:TimeMachine    文件:DrawerDelegate.java   
@Nullable private OnNavigationItemSelectedListener getParent() {
    Activity activity = getActivity();
    if (activity instanceof OnNavigationItemSelectedListener) {
        return (OnNavigationItemSelectedListener) activity;
    }
    return null;
}
项目:bubble    文件:MainActivity.java   
private void setupNavigationView(NavigationView view) {
    view.setNavigationItemSelectedListener(new OnNavigationItemSelectedListener() {
        @Override
        public boolean onNavigationItemSelected(MenuItem menuItem) {
            if (mCurrentNavItem == menuItem.getItemId()) {
                mDrawerLayout.closeDrawers();
                return true;
            }

            switch (menuItem.getItemId()) {
                case R.id.drawer_menu_library:
                    setFragment(new LibraryFragment());
                    break;
                case R.id.drawer_menu_browser:
                    setFragment(new browserFragment());
                    break;
                case R.id.drawer_menu_about:
                    setTitle(R.string.menu_about);
                    setFragment(new AboutFragment());
                    break;
            }

            mCurrentNavItem = menuItem.getItemId();
            menuItem.setChecked(true);
            mDrawerLayout.closeDrawers();
            return true;
        }
    });
}
项目:Red-Calorie    文件:DrawerView.java   
public void setNavigationItemSelectedListener(@Nullable OnNavigationItemSelectedListener listener) {
    navigationView.setNavigationItemSelectedListener(listener);
}
项目:C.    文件:MyMenuFragment.java   
@Override
  public View onCreateView(LayoutInflater inflater,ViewGroup container,Bundle savedInstanceState) {
      View view = inflater.inflate(R.layout.fragment_menu,container,false);



      //得到左侧的列表
      NavigationView navigationView = (NavigationView) view.findViewById(R.id.vNavigation);
      //设置监听
      navigationView.setNavigationItemSelectedListener(new OnNavigationItemSelectedListener() {

    @Override
    public boolean onNavigationItemSelected(MenuItem menuItem) {
        String title = (String) menuItem.getTitle();
        //Toast.makeText(getActivity(),"您点击了 " + title,Toast.LENGTH_SHORT).show();
        switch (title) {
        case "首页":
            Toast.makeText(getActivity(),"这已经是首页了,你再点试试看?",Toast.LENGTH_SHORT).show();
            break;
        case "随手记":
            Intent intent1 = new Intent(getActivity(),MemoActivity.class);
            startActivity(intent1);
            MainActivity.handler.sendEmptyMessage(1);//通知关闭左侧栏
            break;
        case "便签":
            Intent intent2 = new Intent(getActivity(),AtyList.class);
            startActivity(intent2);
            MainActivity.handler.sendEmptyMessage(1);//通知关闭左侧栏
            break;

        case "天气":
            Intent intent4 = new Intent(getActivity(),WeatherActivity.class);
            startActivity(intent4);
            MainActivity.handler.sendEmptyMessage(1);//通知关闭左侧栏
            break;
        case "关于":
            Toast.makeText(getActivity(),"这里没什么东西~",Toast.LENGTH_LONG).show();
            MainActivity.handler.sendEmptyMessage(1);//通知关闭左侧栏
            break;
        default:
            break;
        }
        return false;
    }
});

      return  setupReveal(view) ;
  }
项目:TimeMachine    文件:DrawerDelegate.java   
/**
 * Attach the fragment to hold the drawer and toolbar
 *
 * @param parent a Activity that extends AppCompatActivity & OnNavigationItemSelectedListener
 * @return {@link DrawerDelegate}
 */
public static <ParentActivity extends AppCompatActivity & OnNavigationItemSelectedListener> DrawerDelegate attach(
    @Nullable ParentActivity parent) {
    return attach(parent.getSupportFragmentManager());
}

我们今天的关于vue报错vue-router.esm.js?8c4f:2007 Uncaught (in promise) NavigationDuplicated {_name: "Navigat...的分享就到这里,谢谢您的阅读,如果想了解更多关于android – NavigationView OnNavigationItemSelectedListener未被调用、android – 哪一个使用NavUtils.navigateUpFromSameTask()与onBackPressed()、android.support.design.widget.BottomNavigationView.OnNavigationItemSelectedListener的实例源码、android.support.design.widget.NavigationView.OnNavigationItemSelectedListener的实例源码的相关信息,可以在本站进行搜索。

本文标签: