Articles of android fragments

片段 – 您是否必须在包含整个Activity的片段周围使用Activity Wrapper?

考虑来自developers.android.com的示例应用程序 这描述了像这样使用Fragments: 在电话上,您可以在活动A上使用片段1,在活动B上使用片段2。 在平板电脑上你有更多的空间,所以你在活动A上使用片段1和片段2。 大! …但是……在第一个例子(带有电话的那个)你创建了一个带有xml文件的Activity,其中包含一个而这就是你在该xml上只调用setContentView()的活动吗? 这似乎是很多冗余代码(Activity,XML和Fragment来显示片段):你能将Fragment设置为Activity还是一个总是需要XML的包装器?

onAttach(Activity)已弃用:我可以在其中检查活动是否实现了回调接口

在API 23之前,我使用Fragment的onAttach方法来获取我的侦听器实例,然后在onDetach中清理引用。 例如: @Override public void onAttach(Activity activity) { super.onAttach(activity); mListener = null; try { mListener = (SellFragmentListener) activity; } catch (ClassCastException e) { throw new ClassCastException(activity.toString() + ” must implement SellFragmentListener”); } } @Override public void onDetach() { super.onDetach(); mListener = null; } 在onAttach(Context context)中进行相同的检查是否安全,或者有更好的方法来获取持有者活动实例?

将碎片带到前面(没有片段娱乐)

我有三个片段F1 F2 F3 F4都可以从侧边栏访问。 所有四个都可以随时以任何顺序调用, 现在我想要,如果F1已经被点击(创建)然后再也没有创建F1,而只是使用片段管理器将片段F1带回到前面。 所有其他片段都一样 到目前为止,我为容器中的每个碎片尝试了这个(碎片活动) if (fragmentManager.findFragmentByTag(“apps”)==null) { FragmentManager fragmentManager = getSupportFragmentManager(); FragmentTransaction transaction = fragmentManager.beginTransaction(); transaction.setTransition(FragmentTransaction.TRANSIT_FRAGMENT_FADE); Fragment newFragment = new CategoriesFragment(); transaction.replace(R.id.content_frame, newFragment, “apps”); transaction.addToBackStack(“apps”); transaction.commit(); } else{ } If part确保我没有重新创建片段(如果已经创建了它),但是我应该在else部分写else以便已经创建的片段可以在View Hierarchy中显示出来 请帮助,我坚持了2天。

将支持库更新到27.0.0后,我的片段中出现多个错误

将支持库从v-26.1.0更新到v-27.0.0后,我的片段中出现多个错误。 这是一些这些错误的列表: 错误:智能转换为’Bundle’是不可能的,因为’arguments’是一个可变属性,此时可能已被更改。 错误:’onCreateView’不会覆盖任何内容 错误:’onViewCreated’不会覆盖任何内容 错误:types不匹配:推断types是View? 但预计是View 错误:types不匹配:推断types是上下文? 但是上下文是预期的 错误:types不匹配:推断types是FragmentActivity? 但是上下文是预期的 错误:types不匹配:推断types是FragmentActivity? 但是上下文是预期的 来自android studio的空片段模板。 override fun onCreate(savedInstanceState: Bundle?) { super.onCreate(savedInstanceState) if (arguments != null) { mParam1 = arguments.getString(ARG_PARAM1) mParam2 = arguments.getString(ARG_PARAM2) } } override fun onCreateView(inflater: LayoutInflater?, container: ViewGroup?, savedInstanceState: Bundle?): View? { return inflater!!.inflate(R.layout.fragment_blank, container, false) } override fun onViewCreated(view: View?, savedInstanceState: Bundle?) […]

如何在导航抽屉中获取项目以更改视图

我想用导航抽屉制作一个简单的应用程序,它可以打开其他视图(新闻,信息,图库,联系人等)。 所以我打开了最新的Android Studio,制作了一个与API8> API19兼容的新项目,以获得最大的覆盖面。 我选择了预设的导航抽屉并点击完成。 我已经想出要更改导航抽屉中项目的名称,但是如何让这些项目重定向到新视图? 我已经尝试将setOnItemClickListener实现到MainActivity中,正如导航抽屉网站在http://developer.android.com上所说的那样。 但我似乎无法弄清楚这一切是如何联系在一起的,它不会起作用。 tl; dr:我需要帮助,使导航抽屉中的项目启动一个新的视图/片段,并可能解释它是如何工作的。 这是应用程序项目(Android Studio) https://www.dropbox.com/s/qfz9oul62dzt3rr/NTI_SHOWCASE.zip MainActivity.java package com.christianarne.ntishowcase; import android.app.Activity; import android.content.Intent; import android.content.res.Resources; import android.graphics.Color; import android.graphics.drawable.ColorDrawable; import android.support.v7.app.ActionBarActivity; import android.support.v7.app.ActionBar; import android.support.v4.app.Fragment; import android.support.v4.app.FragmentManager; import android.content.Context; import android.os.Build; import android.os.Bundle; import android.text.Html; import android.view.Gravity; import android.view.LayoutInflater; import android.view.Menu; import android.view.MenuItem; import android.view.View; import android.view.ViewGroup; import […]

如何以编程方式创建片段的布局?

现在创建片段我做了以下代码。 文件名:fragment_a.xml 在Java中 public class FragA extends Fragment{ View view_a; @Override public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) { view_a = inflater.inflate(R.layout.fragment_a, container, false); return view_a; } } 现在我需要知道是否有任何方法可以创建片段视图而无需创建xml文件并将代码写入其中? 我想说的是我不想为片段创建一个xml文件而我想用java代码为该片段创建视图。 那可能吗?

使用支持库实现TabListener

我正在尝试实现Tab导航,但我想确保拥有旧版Android的人仍然可以使用我的应用程序。 应用程序考虑ATM非常简单,我只是想了解如何实现布局,然后我将添加缺少的位。 无论如何,我有一个扩展Fragment Activity的Container Activity(以确保兼容性),这个Activity使用ActionBar创建一个TabView(我相信我的问题就在这里)。 该应用程序将尝试创建三个选项卡并将其添加到ActionBar,我想确保用户可以使用横向导航来回滚动。 这是TabListener我试图实现: public static class TabListener implements ActionBar.TabListener { private Fragment mFragment; private final Activity mActivity; private final String mTag; private final Class mClass; public TabListener(Activity activity, String tag, Class clz) { mActivity = activity; mTag = tag; mClass = clz; } public void onTabSelected(Tab tab, FragmentTransaction ft) { if […]

碎片未从内存中释放

我有一个活动,其中包含一个具有适配器FragmentStatePagerAdapter的View Pager。 每次进入活动时,它将占用200mb的内存,在退回活动后(finish())然后重新输入它将附加并加倍手机上使用的内存。 在对问题进行故障排除后,似乎片段管理器没有释放片段,尽管我试图删除它们但它只是不起作用。 我尝试清空正在添加的片段以确保它不是片段内部的问题仍然存在。 我的适配器代码是 private class ChildrenPagerAdapter extends FragmentStatePagerAdapter { private List childrenBean; public ChildrenPagerAdapter(FragmentManager fm, List bean) { super(fm); this.childrenBean = bean; } @Override public int getItemPosition(Object object) { return PagerAdapter.POSITION_NONE; } @Override public Fragment getItem(int position) { ReportFragment reportFragment = new ReportFragment(); reportFragment.childBean = childrenBean.get(position); reportFragment.position = position; reportFragment.mPager = mPager; […]

如何告诉我的自定义FragmentPagerAdapter停止销毁我的碎片?

我有一个带有FragmentPagerAdapter的ViewPager,我的应用程序之前只使用了两个片段(不同types)而没有问题。 我刚刚添加了第三个片段,现在我的适配器/ viewpager似乎在我远离它们时会破坏我的碎片。 例如,如果我在第1页,第3页将被销毁并在我接近它时重新创建。 如果我在第3页,第1页也是如此。 这在我的应用中引起了很多问题。 片段根本不是RAM很重,所以我怎么能阻止这种情况发生呢?

是否可以刷新片段的视图

我以编程方式更改了应用程序的locale ,如下所示: Resources res = context.getResources(); DisplayMetrics dm = res.getDisplayMetrics(); android.content.res.Configuration conf = res.getConfiguration(); conf.locale = new Locale(“cn”); res.updateConfiguration(conf, dm); 在此之后,我想刷新当前显示的片段视图以显示新的区域设置。 所以,我首先得到当前片段(这是最新的一个在backstack ): BackStackEntry latestEntry=fragMgr.getBackStackEntryAt(fragMgr.getBackStackEntryCount()-1); String str=latestEntry.getName(); Fragment fragment=fragMgr.findFragmentByTag(str); 在我获得当前显示的片段后,我想刷新它的视图 ,但是怎么做呢? 在Android中是否可以刷新片段的视图