Questions tagged «android-fragments»

片段代表Android应用程序中可重用的行为或部分用户界面。

6
拒绝对先前失败的类java.lang.Class <nt>进行重新初始化:java.lang.NoClassDefFoundError
我在控制台中看到一条信息日志,看起来像一个错误。它是从“艺术”印刷而成的,“艺术”通常与记忆有关,但是我需要帮助了解它的含义。有问题的类是我的MapFragment类。MapFragment是我创建的自定义类,该类扩展了SupportMapFragment,以便可以覆盖触摸事件。此类是否引起此问题,该如何解决? 这是我的MapFragment类 public class MapFragment extends SupportMapFragment { private TouchableWrapper mTouchView; @Override public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) { View originalContentView = super.onCreateView(inflater, container, savedInstanceState); mTouchView = new TouchableWrapper(getActivity()); mTouchView.addView(originalContentView); return mTouchView; } @Override public View getView() { return mTouchView; } /** * MapOnTouchListener callback * * @param …

4
从后堆栈中取出碎片
将平板电脑纵向放置时,活动中有3个片段。但是,在风景中时,我只有两个这样的片段。我遇到的问题是,从肖像到风景时,活动正在创建第三个片段。我收到错误消息,因为无法创建此片段。 我已经知道正在创建此片段,因为它位于后堆栈中。 我试图通过使用onDestroy方法删除片段 FragmentTransaction f = fragmentManager.beginTransaction(); f.remove(mf); f.commit(); 但是我收到一个错误,说在onSaveInstanceState之后我不能使用此功能 将这个片段从后栈中取出的正确方法是什么? 更新资料 我可能应该补充一点,我遇到问题的片段是该库中的mapFragment https://github.com/petedoyle/android-support-v4-googlemaps 我的使用方式就像这样 mf = MapFragment.newInstance(1, true); ft = fragmentManager.beginTransaction(); ft.replace(R.id.mapContainer, mf); ft.setTransition(FragmentTransaction.TRANSIT_FRAGMENT_FADE); ft.addToBackStack("map"); ft.commit();

11
如何处理多片段活动中的onContextItemSelected?
我目前正在尝试调整我的应用程序以使用“ Android v4兼容性库”,甚至向Android 1.6用户提供使用片段的好处。 上下文菜单的实现似乎很棘手: 该应用程序的主要活动是扩展FragmentActivity 类。 片段全部基于扩展Fragment类的一类。 片段类正在其onCreateView()方法中调用 registerForContextMenu(),并覆盖了 onCreateContextMenu()和onContextItemSelected()方法。 对于onCreateContextMenu()来说,它工作得很好。上下文菜单从资源文件中放大,并根据所选项目(即使该片段不是ListFragment,也基于listView ...)进行了少许修改。 选择上下文菜单项时,会发生此问题。 从第一个添加的片段开始,为所有当前存在的片段调用onContextItemSelected()。 在我的情况下,这些片段用于显示文件夹结构的内容。当打开子文件夹片段的上下文菜单并选择菜单项时,首先在较高级别上调用onContextItemSelected()(取决于此刻允许/可见的片段数量)。 现在,我使用活动级别的字段的变通方法,该字段包含调用其onCreateContextMenu()的最后一个片段的标签。这样,当存储的标签与getTag()不同时,我可以在onContextItemSelected()的开头调用“ return super.onContextItemSelected(item)” 。但是这种方法对我来说有点脏。 为什么在所有片段上调用onContextItemSelected()?不仅仅是调用onCreateContextMenu()的那个吗? 处理此问题的最优雅方法是什么?

5
隐藏并显示ViewPager的父Fragment时,ViewPager的Fragment的视图丢失
我一直在使用ViewPager和我自己的FragmentStatePagerAdapter看到一些奇怪的行为。 我的视图层次结构如下所示: -&gt; (1) Fragment root view (RelativeLayout) -&gt; (2) ViewPager -&gt; (3) ViewPager's current fragment view 当负责片段根视图(1)的片段被隐藏(在片段事务中使用.hide())然后显示(与.show()一起)时,当前在ViewPager中显示的片段视图(3) )变为空,尽管该片段仍然存在。基本上,我的ViewPager变得完全空白/透明。 我发现解决此问题的唯一方法是致电 int current = myViewPager.getCurrentItem(); myViewPager.setAdapter(myAdapter); myViewPager.setCurrentItem(current); 显示父片段之后。这会触发视图重新创建并出现在屏幕上。不幸的是,这偶尔会导致处理寻呼机适配器的异常,该适配器unregisterDataSetObserver()在旧的观察器上调用两次。 有一个更好的方法吗?我想我要问的是: 隐藏ViewPager的父片段时,为什么ViewPager中的片段视图被破坏? 更新:当应用程序“最小化”然后“恢复”时(通过按下Home Action键然后返回),也会发生这种情况。 根据请求,这是我的寻呼机适配器类: public class MyInfoSlidePagerAdapter extends FragmentStatePagerAdapter { private ArrayList&lt;MyInfo&gt; infos = new ArrayList&lt;MyInfo&gt;(); public MyInfoSlidePagerAdapter (FragmentManager fm) { super(fm); …

5
在后台运行应用程序时关闭DialogFragment的正确方法
我开始使用DialogFragment,因为它们可以通过方向更改和其他东西很好地工作。但是我遇到了一个讨厌的问题。 我有AsyncTask显示进度DialogFragment并将其关闭onPostExecute。一切正常,除非在onPostExecute应用程序在后台运行时发生(例如,按“主页”按钮后)。然后我在DialogFragment关闭时遇到了这个错误-“ Can not perform this action after onSaveInstanceState”。h 常规对话框可以正常工作。但不是FragmentDialog。 所以我想知道,当应用程序在后台时关闭DialogFragment的正确方法是什么?我并没有真正使用Fragments,所以我认为我只是缺少一些东西。

4
在片段中注册和注销BroadcastReceiver
我的应用程序有一个带有3个片段选项卡的操作栏。在第二个片段中,我注册和注销了BroadcastReceiver。我注销在接收onPause和登记它onCreateView和onResume。 getActivity().registerReceiver(this.batteryInfoReceiver, new IntentFilter(Intent.ACTION_BATTERY_CHANGED)); 和 getActivity().unregisterReceiver(batteryInfoReceiver); 1)是否可以在onCreateView和onResume中两次注册相同的接收者?(是否无害?) 2)仅在onResume中注册接收者就足够了吗?

6
片段的onSaveInstanceState()永远不会被调用
我正在尝试将数据保存在Fragment的onSaveInstanceState()中,但从未调用该方法。 有人可以帮忙吗? public class MyFragment extends Fragment { @Override public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) { ScrollView content = (ScrollView) inflater.inflate(R.layout.content, container, false); // More stuff return content; } @Override public void onSaveInstanceState(Bundle icicle) { // NEVER CALLED super.onSaveInstanceState(icicle); //More stuff } }

4
为什么要使用Fragment#setRetainInstance(boolean)?
我发现Fragment#setRetainInstance(true)令人困惑。这是从Android Developer API中提取的Javadoc : public void setRetainInstance(布尔值保留) 控制是否在活动重新创建期间保留片段实例(例如通过配置更改)。这只能与不在后堆栈中的片段一起使用。如果设置,则重新创建活动时,片段生命周期将略有不同: onDestroy()将不会被调用(但onDetach()仍会被调用,因为该片段正在从其当前活动中分离出来)。 由于不会重新创建片段,因此不会调用onCreate(Bundle)。 onAttach(活动)和onActivityCreated(捆绑)将仍然被调用。 问题:作为开发人员,您如何使用它?为什么它使事情变得更容易?

3
Android FragmentTransaction自定义动画(未知的动画师名称:翻译)
我正在尝试使用自定义动画来处理片段。 我已按照在线教程进行操作,但出现以下错误: java.lang.RuntimeException:未知的动画制作者名称:翻译 动画的XML如下: &lt;?xml version="1.0" encoding="utf-8"?&gt; &lt;set xmlns:android="http://schemas.android.com/apk/res/android"&gt; &lt;translate android:fromXDelta="100%" android:toXDelta="0" android:duration="300" /&gt; &lt;/set&gt; Java文件如下所示: public void goCategory(View v) { FragmentTransaction ft = fm.beginTransaction(); ft.setCustomAnimations(R.animator.anim_in_left, R.animator.anim_out_left); ft.show(fragment); ft.commit(); } 我在理解其他线程中的解决方案时遇到了麻烦。如果有人能为我哑巴,我将非常感激。

3
无法在Android中将onActivityResult RESULT_OK解析为变量?
我正在尝试在片段中启动相机,但是片段中的onActivityResult无法解析RESULT_OK。我该怎么办? 我正在使用以下方法启动相机: public static final int CAMERA_REQUEST_CODE = 1999; Intent cameraIntent = new Intent(android.provider.MediaStore.ACTION_IMAGE_CAPTURE); startActivityForResult(cameraIntent, CAMERA_REQUEST_CODE); 使用以下方法获取捕获的图像: @Override public void onActivityResult(int requestCode, int resultCode, Intent data) { super.onActivityResult(requestCode, resultCode, data); if (requestCode == CAMERA_REQUEST_CODE &amp;&amp; resultCode == RESULT_OK) { Bitmap bitmap = (Bitmap) data.getExtras().get("data"); if (bitmap != null) { } …

4
片段中的成员变量与setArguments
我注意到,在Fragments的Android参考(尤其是DialogFragment)中,它们所做的一些事情与我期望的有所不同: 1)。使用public static foo newInstance()方法而不是构造函数。 2)。使用setArguments而不是成员变量将值传递给onCreateDialog。 我已经阅读到使用反射时newInstance似乎是更可取的。但是我真的不明白为什么他们要通过捆绑包传递参数。尽管使用成员变量会更安全(不使用字符串从映射中获取),并且开销会更少。 有什么想法吗?

2
使用viewLifecycleOwner作为LifecycleOwner
我有一个片段: class MyFragment : BaseFragment() { // my StudentsViewModel instance lateinit var viewModel: StudentsViewModel override fun onCreateView(...){ ... } override fun onViewCreated(view: View, savedInstanceState: Bundle?) { super.onViewCreated(view, savedInstanceState) viewModel = ViewModelProviders.of(this).get(StudentsViewModel::class.java) updateStudentList() } fun updateStudentList() { // Compiler error on 'this': Use viewLifecycleOwner as the LifecycleOwner viewModel.students.observe(this, Observer { //TODO: …

1
什么是ViewModelStore和viewModelStoreOwner?
由于这个新的ViewModelProvider api,我非常困惑(不推荐使用ViewModelProviders) 与新更改一样,也有新的构造函数(源代码)。 #1 public ViewModelProvider(@NonNull ViewModelStoreOwner owner) { this(owner.getViewModelStore(), owner instanceof HasDefaultViewModelProviderFactory ? ((HasDefaultViewModelProviderFactory) owner).getDefaultViewModelProviderFactory() : NewInstanceFactory.getInstance()); } #2 public ViewModelProvider(@NonNull ViewModelStoreOwner owner, @NonNull Factory factory) { this(owner.getViewModelStore(), factory); } #3 public ViewModelProvider(@NonNull ViewModelStore store, @NonNull Factory factory) { mFactory = factory; mViewModelStore = store; } 摇篮依赖度: implementation "androidx.lifecycle:lifecycle-extensions:2.2.0-rc02" …
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.