我已经开始使用Android M运行时权限。 在这里,我面临的问题是,如果requestPermissions从Dialog Fragment类被调用,然后onRequestPermissionsResult不被调用在相同的Dialog fragment类。 但是,如果从Activity类或Fragment类调用requestPermissions则onRequestPermissionsResult方法将在同一个类中调用。 这是我的示例代码: public class ContactPickerDialog extends DialogFragment { private static final int READ_CONTACTS_REQUEST_CODE = 12; private Context mContext; private void loadContact() { if(hasPermission(mContext, Manifest.permission.READ_CONTACTS)){ new ContactSyncTask().execute(); } else { this.requestPermissions(new String[]{Manifest.permission.READ_CONTACTS}, READ_CONTACTS_REQUEST_CODE); } } @Override public void onRequestPermissionsResult(int requestCode, String[] permissions, int[] grantResults) { Logger.d("TAG", "dialog onRequestPermissionsResult"); switch (requestCode) { […]
我正在开发一个使用导航抽屉模式(使用DrawerLayout)的应用程序。 每次点击一个抽屉的物品,将replace主容器中的碎片。 但是,我不确定什么时候是合适的时间做碎片交易? 当抽屉开始closures? 或closures后? 在google的documentaion示例中 ,您可以看到他们正在单击项目后执行交易,然后closures抽屉。 因此,抽屉看起来很不平滑,而且看起来很不好(这也发生在我的应用程序中)。 另一方面,在Gmail和Google Drive应用程序中,似乎他们在抽屉closures之后正在进行交易(是吗?)。 因此,抽屉不是非常滞后,非常平滑的,但至less需要1秒钟(抽屉被closures的时间)才能看到下一个碎片。 立即进行碎片交易似乎没有办法让抽屉顺利。 你怎么看? 提前致谢!
我有一个ViewPager,我想获得当前select的可见视图,而不仅仅是一个数字。 getChildAt(getCurrentItem)返回错误的View @Override public void setUserVisibleHint(boolean isVisibleToUser) { super.setUserVisibleHint(isVisibleToUser); if (isVisibleToUser == true) { mFocusedListView = ListView; } } 这是第二个代码,这不是一直在悲伤的工作。 有时返回null,有时只是返回错误的View ViewPager上的ViewPager和getChildAt()一起工作也不行,每次都不给我正确的View。 我想如何取回当前可见的视图? view = MyActivity.mViewPager.getChildAt(MyActivity.mViewPager.getCurrentItem()).getRootView(); listview = (ListView) view.findViewById(R.id.ListViewItems);
在我的应用程序中有一个ListFragment,其中列表中的每个项目都包含一个checkbox。 只要用户点击其中一个checkbox,应用程序就会启动一个ActionMode上下文菜单。 但是我希望应用程序在单击另一个组件时closuresActionMode菜单。 我尝试了Fragment#closeContextMenu()但没有成功。 任何想法我怎么能做到这一点?
我有一个奇怪的问题导致冲突。 我不得不切换到本地Fragments来修复它,但也有错误。 我原来的问题:我有一个导航抽屉设置与v4 Fragments. 要求我的片段之一的权限,我打电话给ActivityCompat.requestPermissions(getActivity(), Manifest.permission.ACCESS_FINE_LOCATION, 1); 提示显示正常,但是当我接受或拒绝这个权限时,什么也没有发生。 callback函数onRequestPermissionsResult()永远不会被调用。 相反,它会在我的碎片附加到的活动中被调用。 对我无用,我需要callback才能在片段中工作。 考虑到这一点,我被告知我需要使用FragmentCompat ,但只适用于native Fragments (v13+) ,所以我改变了导航抽屉工作从本地碎片,而不是v4支持库碎片。 但是 ,因为我正在使用AppCompatActivity,某些事情不起作用,如addToBackStack()并返回到以前的片段。 长话短说,有没有人知道我可以如何使用v4.Fragment并仍然要求在Fragment权限,并获得在Fragment的callback? 我觉得这是Android的一个错误,但没有得到解决,但我不是100%。 让我知道如果你需要看我的代码,这只是你需要运行时权限的标准方法,我想使用v4碎片,尽pipe这不工作,从我的理解。
我的应用程序在其Activity中有一个Fragment。 我想以编程方式从当前片段本身replace另一个片段。 例如,如果我点击片段中的一个button,片段应该被replace为另一个,但是活动应该保持不变。 可能吗? 如果是的话,该怎么做呢?
我有一个片段(我将它pagerFragment ),被添加到后台堆栈,并可见。 它拥有一个带有FragmentPagerAdapter的viewPager 。 FragmentPagerAdapter拥有(比方说)两个片段:A和B. 首先添加的片段效果很好。 片段A有一个button,一旦点击,将片段(C)添加到后台。 问题是这样的:如果我添加该片段(C),然后单击返回, pagerAdapter是空的,我不能看到里面的任何片段。 如果我使用hack,并且在pagerFragment的onDestroyView()销毁子片段(A和B onDestroyView() ,这就解决了这个问题,尽pipe我不想使用这个入侵。 任何想法可能是什么问题?
我的应用程序有一个带3个片段选项卡的操作栏。 在第二个片段中,我注册并取消注册BroadcastReceiver。 我在onPause注销接收器,并在onCreateView和onResume注册它。 getActivity().registerReceiver(this.batteryInfoReceiver, new IntentFilter(Intent.ACTION_BATTERY_CHANGED)); 和 getActivity().unregisterReceiver(batteryInfoReceiver); 1)两次注册相同的接收者(在onCreateView和onResume中)是否可以?(是否无害?) 2)在onResume中注册接收器是否足够?
有没有办法确保导航抽屉停留在片段内容的顶部? 我用虚拟数据创build了一个小testing应用程序。 10个片段带有相应的编号button和文本视图。 问题在于片段元素似乎比导航抽屉具有更高的优先级。 如截图所示,一旦我尝试打开“0片段”,它会select在导航抽屉后面的button上注册点击。 按任何其他内容项目工作正常,但只要没有其他可交互项目在他们之下。 我能做些什么来让导航抽屉正确地保持在它后面的内容之上?
我在xml布局中为我的片段定义了一个ID: <?xml version="1.0" encoding="utf-8"?> <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" android:id="@+id/test_fragment" … 然后我在活动的onCreate方法中添加这个片段: MyFragment myFragment = new MyFragment(); fragmentTransaction.add(R.id.fragment_container, myFragment); fragmentTransaction.commit(); 这一切工作正常。 更换碎片,也正在工作。 后来我试图通过它的ID在活动的一个方法中检索这个片段: MyFragment myFragment = (MyFragment) getFragmentManager().findFragmentById(R.id.test_fragment); 这样做会导致myFragment为null 。 总是。 当我试图做标签而不是ID我可以通过它的标签检索片段没有任何问题: MyFragment myFragment = new MyFragment(); fragmentTransaction.add(R.id.fragment_container, myFragment, "testfragment"); fragmentTransaction.commit(); … MyFragment myFragment = (MyFragment) getFragmentManager().findFragmentByTag("testfragment"); 为什么找不到fragmentFilementByIdfind这个片段,但findFragmentByTag是这样做的? 我错过了什么吗?