对于想了解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: "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: "Navigat...
今天在写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.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()); }
解决方法
<DrawerLayout> <FrameLayout /> <NavigationView /> </DrawerLayout>
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的实例源码
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的实例源码
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; } }); }
@Nullable private OnNavigationItemSelectedListener getParent() { Activity activity = getActivity(); if (activity instanceof OnNavigationItemSelectedListener) { return (OnNavigationItemSelectedListener) activity; } return null; }
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; } }); }
public void setNavigationItemSelectedListener(@Nullable OnNavigationItemSelectedListener listener) { navigationView.setNavigationItemSelectedListener(listener); }
@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) ; }
/** * 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的实例源码的相关信息,可以在本站进行搜索。
本文标签: