Articles of android fragments

Android确定是否应使用多片段布局

在为Android 3.x制作应用程序时,您基本上只需检查设备是否处于横向状态,以查看它是否可以并排放置多个片段。 但这只是因为您基本上保证该设备是平板电脑。 随着兼容性库和android 4.0的引入,我无法想到我认为是一种“好”的方式来确定我是否可以摆脱并排片段或者应该恢复到每个屏幕的标准片段。 “ 在NewsReader示例应用程序中,Google为每个常见分辨率都有一个特殊值文件,每个分辨率都有一个布尔值,表示分辨率是否应该支持2片段布局,但我认为这种方式设计得很差。 我能想到的唯一方法是检查屏幕的大小(猜测它是否是平板电脑或至少大到不破坏布局),然后检查方向。 因此,如果有人知道如何轻松有效地检查这一点,请告诉我!

如何避免重新创建片段到ViewPager?

我正在使用一个包含5页的FragmentStatePagerAdapter的ViewPager 。 在第一页中,我有一个带有项目的ListView。 当我在ViewPager的最后一页更改,然后我回到第一页时,我的ListView为空,因为已重新创建了适配器。 Android总是调用下一个方法:onAttach(),onCreate(),onCreateView(),onViewCreated(),onActivityCreated(),onStart()和onResume()。 我想不要使用ViewPager.setOffscreenPageLimit()方法来避免我的页面被销毁。 还有其他解决方案吗? 我想要的行为与Facebook相同。 我做错了什么? 如何将数据保存在ListView中? 我的FragmentStatePageAdapter的代码: public class AdapterMain extends FragmentStatePagerAdapter { List fragments = new ArrayList(); public AdapterMain(FragmentManager fm) { super(fm); fragments.add(new FragmentShop()); fragments.add(new FragmentSearch()); fragments.add(new FragmentSell()); fragments.add(new FragmentNotification()); fragments.add(new FragmentProfile()); } @Override public Fragment getItem(int position) { return fragments.get(position); } @Override public int getCount() { return fragments.size(); } […]

Android,AsyncTask中的实用程序类和松散耦合请指教

我试图搜索关于这个主题的任何讨论,但到目前为止我还没有find任何有用的东西。 因此,我决定继续发布这个。 所以我的问题是关于Android最佳做法。 我正在创建一个调用RESTful端点的简单应用程序,解析下载的JSON,并在活动中包含的某些片段中显示结果。 我有一个自定义的“实用程序”类,它扩展了AsyncTask。 在doInBackground方法中,我发出请求,将响应存储在String中等等(非常简单的东西)。 现在,我了解AsyncTask还有另外两个方法 – onPreExecute和onPostExecute。 如果我在网上研究的是正确的,这些方法是我应该能够与UI交互的地方,通过将我的上下文传递给这个实用程序类,通过id查找视图,设置字段文本,或者我想要的任何内容去做。 所以这是我的问题。 围绕这个的最佳做法是什么? 目前,扩展AsyncTask并使Web服务调用的实用程序类具有私有成员variables: private FragmentActivity mActivityContext; 然后,为了与UI进行交互,我做了类似这样的事情: @Override protected void onPreExecute() { super.onPreExecute(); android.support.v4.app.FragmentManager fm = mActivityContext.getSupportFragmentManager(); MainActivity.PlaceholderFragment fragment = (MainActivity.PlaceholderFragment)fm.findFragmentByTag(“PlaceholderFragment”); if (fragment != null) { TextView textView = (TextView)fragment.getView().findViewById(R.id.my_custom_field); textView.setText(“This field was updated through onPreExecute!”); } } 虽然到目前为止这似乎工作正常,但我担心的是 – 如果实用程序类正在访问它引用的活动的片段管理器? 它甚至应该参考活动吗? 通过使用片段管理器,实用程序类必须知道片段标记。 这不是一种非常模块化或松散耦合的方法。 当我创建实用程序类的实例时,解决方案就像传递fragment标记一样简单,而不是像我现在那样硬设置吗? […]

用FragmentActivity和Fragments替换TabActivity

由于TabActivity已弃用,我需要find一种方法来使用Fragments。 在我知道它是如何工作之前我曾经使用过Fragments但是我需要一个指南来创建带有FragmentActivities的标签主机。 我在互联网上find了几个例子,它们都是关于将片段放入选项卡的容器中。 我想要的是为每个选项卡添加FragmentActivities。 因为在我的应用程序中,我将使用4个选项卡,每个选项卡中都包含非常复杂的内容。 因此,我需要为每个选项卡提供FragmentActivity来管理我将放在单独容器中的每个选项卡下的片段。 解: 在回答并在互联网上搜索后,我得到了一个解决方案。 根据我发现的解决方案,我在标签主机下的每个选项卡中跟踪分隔堆栈中的碎片。 这是我的GitHub存储库,我为这个问题创建了一个小示例应用程序。

FragmentManager:moveToState:GridFragment {…}的片段状态未内联更新; 预期状态1find0

我有一个简单的Activity和Retained Fragment,就像Alex Lockwood的博客文章一样 。 我的活动在onCreate()里面就像这样: FragmentManager fm = getSupportFragmentManager(); retainedFragment = (GridFragment) fm.findFragmentByTag(RETAINED_FRAGMENT_TAG); // If the Fragment is non-null, then it is currently being // retained across a configuration change. if (retainedFragment == null) { retainedFragment = new GridFragment(); fm.beginTransaction().add(retainedFragment, RETAINED_FRAGMENT_TAG).commit(); }else{ list = retainedFragment.getList(); System.out.println(list.size());//OUTPUT 12 } 而我的Fragments ‘ onAttach()是: @Override public void onAttach(Context […]

菜单图标未显示在操作栏中

我需要在Fragment中扩充自定义菜单。 我只有一个菜单项。但图标没有显示。 有人可以告诉我的代码有什么问题 我的menu.xml 我在onCreateView()中设置 setHasOptionsMenu(true); getActivity().invalidateOptionsMenu(); 并夸大菜单 @Override public void onCreateOptionsMenu(Menu menu, MenuInflater inflater) { // TODO Auto-generated method stub inflater = getActivity().getMenuInflater(); inflater.inflate(R.menu.menu, menu); } 结果屏幕如下。 我需要有搜索图标而不是菜单溢出图标。

在片段中实现RecyclerView

我试图在AppCompatActivity中的ViewPager中的片段中创建ListView。 在AppCompatActivity中,所有视图元素都在CoordinatorLayout中。 因为我使用了CoordinatorLayout。 我必须使用RecylerView我试图遵循developer.android.com的培训,但我的应用程序在我的日志后停止。 这是我在myFragment中停止应用程序的代码。 import android.app.Activity; import android.os.Bundle; import android.support.v4.app.Fragment; import android.support.v7.widget.LinearLayoutManager; import android.support.v7.widget.RecyclerView; import android.util.Log; import android.view.LayoutInflater; import android.view.View; import android.view.ViewGroup; //… @Override public View onCreateView(LayoutInflater inflater, ViewGroup container,Bundle savedInstanceState) { View view = inflater.inflate(R.layout.fragment_city_list, container, false) mRecyclerView = (RecyclerView) view.findViewById(android.R.id.list); mLayoutManager = new LinearLayoutManager(this.getActivity()); Log.d(“debugMode”, “The application stopped after this”); mRecyclerView.setLayoutManager(mLayoutManager); mAdapter […]

FragmentManager中的Mange BackStackEntries

如何在FragmentManager清除BackStackEntries 这是我用来更改片段对象的代码 FragmentTransaction fragmentTransaction = getFragmentManager().beginTransaction(); Fragment homeFragment = new Home(); fragmentTransaction.replace(R.id.mainFragement, homeFragment); fragmentTransaction.addToBackStack(null); fragmentTransaction.commit(); 在特定情况下,我需要删除完整的backstack条目。 我没有在片段管理器中find任何特定的方法。 有任何想法吗?

如何使用ListView使Fragment可滚动

我想要一个有2个ListView的Fragment。 我不希望listView滚动而只是想让整个片段滚动。 inheritance人代码: 当我运行此代码时,第二个listView获得自己的滚动条,有没有办法停止这个并使整个片段滚动?

如何知道片段是否已经调用onCreateView()

我们都知道,当使用带有Fragment和FragmentPagerAdapter ViewPager时,我们会加载3个Fragment :可见的Fragment ,并且每个Fragment都有。 所以,如果我有7个Fragments并且我正在迭代它们以查看它们中的哪3个是已加载的,并且我的意思是onCreateView()已经被调用,我该如何确定? 编辑: Fragment不一定是ViewPager显示的Fragment ,只是已经调用了onCreateView() 。