Articles of android fragments

Android将碎片保存到导航抽屉中

在我的程序中我有一些片段,我可以用这个代码点击它来替换每个片段。 我的问题是:这些片段加载很少,点击每个片段后,从中创建新片段并在点击片段后再次加载。 如何保存片段内容或状态并防止重新加载? @Override public void onNavigationDrawerItemSelected(int position) { Fragment fragment = null; switch (position) { case 0: fragment = new InfoFragment(); break; case 1: fragment = new ParentOtoFragment(); break; case 2: fragment = new ParentProFragment(); break; case 3: fragment = new SupportFragment(); break; case 4: fragment = new AboutFragment(); break; } if (fragment != […]

AndroidRuntimeException:在DialogFragment中添加内容之前必须调用requestFeature()

我明白这个问题已经在这里多次询问,但是在花了最后1.5小时阅读并试图理清我的问题之后,我做不到。 问题陈述: 在DialogFragment调用setStyle方法时,我得到标题中声明的RuntimeException错误。 这是我的原始代码,它不会抛出此exception: public class MapDialogFragment extends DialogFragment @Override public void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setStyle(DialogFragment.STYLE_NO_FRAME, android.R.style.Theme_Holo); } @Override public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) { view = inflater.inflate(R.layout.maps_dialog, container, false); return view; } } 现在,我刚刚在我的应用程序中添加了ImmersiveMode。 正如你们中的一些人所知,当显示对话框时,沉浸式模式会丢失,因此必须覆盖这些片段并设置适当的标志以保持模式。 我成功地完成了这项工作 – 它有效。 但是,我必须注释掉一行: setStyle(DialogFragment.STYLE_NO_FRAME, android.R.style.Theme_Holo); 所以我失去了对话框的风格,这就是问题所在。 仔细看看DialogFragment中的setStyle方法,我无法真正看到如何调用requestFeature() : public void setStyle(int style, int theme) […]

Android Google在RecyclerView.ViewHolder中映射片段

如何从RecyclerView.ViewHolder访问GoogleMap 我有: public class MapRowHolder extends RecyclerView.ViewHolder { public MapRowHolder(View view) { super(view); } } XML: 适配器: public class MapAdapter extends RecyclerView.Adapter { public RecyclerView.ViewHolder onCreateViewHolder(ViewGroup viewGroup, int i) { RecyclerView.ViewHolder mh; View v = LayoutInflater.from(viewGroup.getContext()).inflate(R.layout.map_row, viewGroup, false); mh = (RecyclerView.ViewHolder)new PodatkiZaMapRowHolder(v); return mh; } public void onBindViewHolder(RecyclerView.ViewHolder RowHolder, int polozaj) { MapRowHolder mapRowHolder = […]

Android:Activity和Fragments之间的OptionMenu

在我的应用程序中,我有一个托管两个片段的活动。 如果我将一个MenuItem添加到菜单中,我可以在我的片段中检索它吗? Activity中的OptionMenu和他的子片段中的OptionMenu之间的联系是什么?

关于DrawerLayout的错误(IllegalArgumentException:查看android.widget.RelativeLayout不是滑动抽屉)

我正在学习如何使用Android的导航抽屉。 我在布局xml文件中创建了一个relativeLayout,并将两个部分(FrameLayout和Listview)放在RelativeLayout中。 但是我收到以下错误: java.lang.RuntimeException:无法启动活动ComponentInfo {com.example.slidingtest / com.slidingmenu.MainActivity}:java.lang.IllegalArgumentException:查看android.widget.RelativeLayout@423c0dc0不是滑动抽屉 ClassCastException android.widget.FrameLayout $ LayoutParams to android.support.v4.widget.DrawerLayout $ LayoutParams 我find了这个网页,但仍无法解决我的问题。 有人可以帮帮我吗? 谢谢… 这是我的MainActivity.java public class MainActivity extends Activity { private DrawerLayout mDrawerLayout; private RelativeLayout relativeLayout; private ListView mDrawerList; private ActionBarDrawerToggle mDrawerToggle; private CharSequence mDrawerTitle; private CharSequence mTitle; private String[] navMenuTitles; private TypedArray navMenuIcons; private ArrayList navDrawerItems; private NavDrawerListAdapter adapter; […]

android:FragmentTransactions中没有尊重提升

所以我的布局看起来类似于以下内容: 这为我的活动形成了我的基本布局文件,然后我将FrameLayout替换为各种片段。 一个这样的片段有这样的布局: 我希望因为我将工具栏和SlidingTabLayout的高度设置为4dp,工具栏不会在选项卡上投射阴影,但它会: 理想情况下,我不想在代码中设置工具栏的高程 – 有没有人知道是否有办法防止工具栏投射阴影? 我会假设两个视图都在4dp高度,即使它们不在同一个布局中,也不会投射阴影。 谢谢您的帮助。

Android Open Fragment over ViewPager

我是Android编程的新手,我正在尝试制作一个使用一个主要片段活动的viewpager中的选项卡的应用程序。 viewpager和tabs工作正常,但我希望有一个选项菜单,当选择一个项目时,会打开一个全新的片段,但我似乎无法删除视图寻呼机。 我希望能够将新片段放在主屏幕上的viewpager上,但尝试使用片段事务来实现这一点似乎不起作用 有任何想法吗? 感谢您的时间

Android嵌套片段 – 片段交互

片段片段交互的Android最佳实践( 此处和此处描述)强制Activity实现子片段定义的侦听器。 然后, Activity管理片段之间的通信。 根据我的理解,这是为了保持碎片彼此松散耦合。 然而, 嵌套片段也是如此吗? 我可以想象,嵌套片段直接报告它的父片段而不是活动可能是有意义的。 如果嵌套片段的父片段实现了它的监听器,那么一个(或者应该一个)如何要求父片段执行此操作。 换句话说,类似于下面的范例,但对于Fragments : @Override public void onAttach(Activity activity) { super.onAttach(activity); try { mCallback = (OnHeadlineSelectedListener) activity; } catch (ClassCastException e) { throw new ClassCastException(activity.toString() + ” must implement OnHeadlineSelectedListener”); } }

Android ActionBar始终为null

我有一个带有导航抽屉的活动,可以在片段之间轻弹。 没什么特别的。 但是我想要的是动作栏出现在活动的顶部。 问题是我一直在为nullpointerexception获取Actionbar 。 我尝试过以下几页的答案: getActionBar返回null getActionBar()返回Null(AppCompat-v7 21) 这些都没有用,所以我想我会用自己的代码提交自己的问题。 MainActivity.java package com.jampez.smalltalk; import com.jampez.smalltalk.fragments.HomeFragment; import com.jampez.smalltalk.fragments.MessageFragment; import com.jampez.smalltalk.fragments.PreferencesFragment; import com.jampez.smalltalk.fragments.SettingsFragment; import com.jampez.smalltalk.helper.SessionManager; import android.content.Intent; import android.net.Uri; import android.os.Bundle; import android.support.v4.app.FragmentActivity; import android.support.v4.widget.DrawerLayout; import android.support.v7.app.ActionBar; import android.support.v7.app.ActionBarDrawerToggle; import android.util.Log; import android.view.View; import android.widget.AdapterView; import android.widget.AdapterView.OnItemClickListener; import android.widget.ArrayAdapter; import android.widget.ListView; public class MainActivity extends FragmentActivity { […]

处理Android碎片交易问题的正确/最佳方式

在我的开源Android应用程序中,已发现一个问题,即某个特定片段将在另一个片段之上进入视图或在某种情况下使应用程序崩溃。 如果您想查看更多信息和示例屏幕截图,请访问GitHub: https : //github.com/rpi-mobile/RPIMobile-Android/issues/31 我已经确定了原因,但想知道android.support.v4.app包中的哪些方法用于解决问题。 在MainActivity.java ,是导航抽屉的代码,它使用FragmentTransaction.replace()来切换片段。 出现问题是因为在MapFragment ,我使用: ViewMapFragment vmf = new ViewMapFragment(); FragmentTransaction ft = getSherlockActivity().getSupportFragmentManager().beginTransaction(); ft.addToBackStack(null); ft.replace(R.id.content_frame, vmf); ft.commit(); 在ViewMapFragment的onDestroyView() : FragmentManager fm = getSherlockActivity().getSupportFragmentManager(); FragmentTransaction ft = fm.beginTransaction(); ft.remove(fm.findFragmentById(R.id.mapview)); ft.commit(); onDestroyView()从视图中正确删除ViewMapFragment ,但是如果您在视图中使用它并使用导航抽屉更改为其他片段,则MapFragment仍在后台堆栈中。 所以,对于我的问题: 1)如何在尝试删除/替换它之前检查特定片段是否在后端堆栈上,或者如果您尝试什么都没有(即不检查),应用程序是否会崩溃? 例如,当后台堆栈上没有任何内容时调用popBackStack() 。 2)我应该使用FragmentManager类方法尝试从后栈中删除MapFragment还是应该使用FragmentTransaction方法? 优点与缺点? 3) popBackStack()和popBackStackImmediate()之间的UI有什么区别? 用户是否看到了一些毛病的过渡?