Articles of android fragments

java.lang.IllegalStateException:失败保存状态:active已清除片段中的索引

首先,我的应用程序具有以下结构: SpashActivity -> MainActivity -> switching between many fragments 我的应用程序使用SlideMenu在片段之间切换。 我必须使用attach而不是replace来保持片段状态。 它看起来像: public void switchContent(int index, String fragmentTag) { FragmentManager fragmentManager = getSupportFragmentManager(); FragmentTransaction transaction = fragmentManager.beginTransaction(); if (fragmentManager.findFragmentByTag(fragmentTag) != mContent) { if (!mContent.isDetached()) { transaction.detach(mContent); } if (null == fragmentManager.findFragmentByTag(fragmentTag)) { switch (index) { case 0: mContent = new CategoryFragment(); break; case 1: mContent […]

即使使用FragmentTransaction.addToBackStack(),后退按钮关闭应用程序

我在stackoverflow上读到的其他问题都没有能够解决我的问题。 据我所知,我正在做的一切正确。 我有一个带片段的主/细节流。 创建主活动后,主片段将加载以下代码: Fragment frag; frag = new MainListFragment();//<– **the master fragment** FragmentManager fm = getFragmentManager(); FragmentTransaction transaction = fm.beginTransaction(); transaction.replace(R.id.fragment_container, frag); Log.d("My Debug Bitches", "stack:" + fm.getBackStackEntryCount()); transaction.commit(); 主片段有一个ListView ; 单击列表项会显示详细信息片段,如下所示: @Override public void onListItemClick(ListView listView, View view, int position, long id) { super.onListItemClick(listView, view, position, id); FragmentManager fm = getFragmentManager(); FragmentTransaction transaction […]

Android – 使用GoogleMaps API 2.0的SupportMapFragment提供IllegalArgumentException

我正在尝试使用为Android提供的最新Map API 2.0。 我正在使用支持库,因为我想支持Android 2.2。 以下是我的代码: 主要活动类 public class MainActivity extends FragmentActivity { public FragmentManager fManager ; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); fManager = getSupportFragmentManager(); Button showMapButton = (Button) findViewById(R.id.showMapButton); showMapButton.setOnClickListener(new OnClickListener() { @Override public void onClick(View v) { loadMapFragment(); } }); } private void loadMapFragment() { MapPageFragment plotterFragment = new MapPageFragment(); […]

android棒棒糖animation故障

在运行Android 5(Lollipop)的设备中,我对默​​认布局animation有一种奇怪的行为。 我正在使用具有多个Fragments的活动,这些活动在运行时使用默认的片段管理器进行替换。 当替换旧片段时,我想使用animation来实现流畅的ui流。 在预棒棒糖设备上,animation的效果与预期的一样,但在运行最新操作系统的设备上,片段故障之间的animation: 我尝试使用默认animationxml标记 android:animateLayoutChanges=”true” 因为它不起作用,我使用此代码更改它没有任何效果 mTransaction = mManager.beginTransaction(); mTransaction.setCustomAnimations(android.R.animator.fade_in, android.R.animator.fade_out); mTransaction.remove(mFragment); mTransaction.add(R.id.container, mFragment, “fragment”); mTransaction.commit(); 我已经在不同设备和android模拟器中测试了代码。 奇怪的是,它在运行pre-lollipop的设备和运行最新操作系统(5.0.1)的android模拟器中的预期效果。 但它不适用于运行Android 5.0的Nexus 4和Nexus 5等设备 有什么建议么? 任何帮助? 提前致谢 编辑: 它似乎是一个错误取决于使用的设备。 我已经在不同设备(三星Galaxy S4,HTC(One mini2,One M8,Desire S),Nexus 4和5)上测试了代码,它只出现在谷歌nexus设备上。 编辑 解决animation问题的一种解决方法是通过以下方法禁用硬件加速 应用程序清单中的标签。 但使用这个使应用程序非常慢。 解 解决此问题的解决方案是为活动设置背景图像/颜色/可绘制。 看到

AsyncTask在ViewPager的每个页面上运行

我在android开发教程中有3个Tabs 现在我想要做的很简单,我在每个页面上使用Fragments。 我想在每个页面上显示rss feed中的不同内容。 问题是,当我转到下一个选项卡时,它运行前一个片段的AsyncTask(在onCreateView中)。 所以从第1页开始,它可以很好地加载内容。 然后当你去第2页时再次运行第1页碎片的onCreateView。 并且显然给出了NullException。 关键是它不应该在第2页运行Page 1的AsyncTask。 我不认为有任何示例代码需要告诉我你需要看哪个部分。 然后我会编辑我的问题。 ListFragment中的AsyncTask: public class MyAsyncTask extends AsyncTask<List, Void, List> { // List of messages of the rss feed private List messages; private volatile boolean running = true; @SuppressWarnings(“unused”) private WeakReference fragmentWeakRef; private MyAsyncTask(NieuwsSectionFragment fragment) { this.fragmentWeakRef = new WeakReference(fragment); } @Override protected void onPreExecute() […]

getApplicationContext()方法未定义 – 片段问题

我收到以下错误:方法getApplicationContext()未定义方法findViewById(int)未定义typesFragment1 当我的类扩展到一个Activity而不是一个片段时,这些错误似乎被消除了,但重要的是这个活动仍然是一个片段,所以我不太清楚如何解决这个问题。 任何帮助将不胜感激。 提前致谢。 以下是代码 public class Fragment1 extends Fragment { private String currentUserId; private ArrayAdapter namesArrayAdapter; private ArrayList names; private ListView usersListView; private Button logoutButton; String userGender = ParseUser.getCurrentUser().getString(“Gender”); String activityName = ParseUser.getCurrentUser().getString(“ActivityName”); Number maxDistance = ParseUser.getCurrentUser().getNumber(“Maximum_Distance”); String userLookingGender = ParseUser.getCurrentUser().getString(“Looking_Gender”); Number minimumAge = ParseUser.getCurrentUser().getNumber(“Minimum_Age”); Number maximumAge = ParseUser.getCurrentUser().getNumber(“Maximum_Age”); Number userage = ParseUser.getCurrentUser().getNumber(“Age”); @Override […]

更新片段不起作用

我正在学习Android,在尝试开发应用程序时遇到以下情况: 我有一个Activity有两个Fragments : ReminderListFragment和FilterListFragment 。 第一个片段有一个提醒列表,第二个片段有一个filter列表,其中包含每个filter中注册的项目名称和数量。 但是,当我排除某些提醒时,FilterListFragment值不会更新。 当我删除其中一个filter时会发生同样的事情(在这种情况下,它会删除所选filter的所有记录),它不会更新“提醒”列表。 FilterListFragment代码: @Override public boolean onContextItemSelected(MenuItem item) { if (item.getGroupId() == R.id.context_menu_category) { // Used to verify it it is the right context_menu //Gets the item // position and gets the category in that position: AdapterView.AdapterContextMenuInfo info = (AdapterView.AdapterContextMenuInfo) item.getMenuInfo(); Category category = ((CategoryFilter) lvFilters.getAdapter().getItem(info.position)).getCategory(); // Switch between […]

如何正确扩展LinearLayout以创建自定义视图

我有一些“卡片”,这是一个带有TextView的简单LinearLayout 然后我的主片段有一个垂直的LinearLayout ..在这个主片段中我将这个“卡片”添加到主布局: # main fragment layout View view = inflater.inflate(R.layout.main_activity, null); LinearLayout ll = (LinearLayout) view .findViewById(R.id.main_activity_ll); # get card View card = inflater.inflate(R.layout.card, null); # add to fragment layout ll.addView(card); 这非常好用我的卡填充片段布局的整个宽度。 其实我在期待什么。 现在我为我的卡创建了一个单独的类: Class Card extends LinearLayout{ public Card(Context context) { super(context); View view = LayoutInflater.from(getContext()).inflate( R.layout.card, null); this.addView(view); } } 然后,如果我将卡添加到主片段布局中: # […]

ViewPostImeInputStage ACTION_DOWN

当我试图调试我的程序时,我无法弄清楚错误。 我初始化了两个按钮,并在它们上使用了.setOnClickListener。 当用户单击按钮时,他们应该在LogCat上看到调试消息。 但是,每当我单击按钮,或者如果我单击屏幕上的任何位置时,我会一直看到此消息:ViewPostImeInputStage ACTION_DOWN。 有谁知道该消息表示什么,或者他们是否解决了我的问题? 非常感谢!

使用Rxjava Android从Activity更新片段

我有一个简单的用例,其中: Activity1创建一个fragment1 创建后的fragment1通知活动它是否已创建并更新其activity1视图。 获取通知更新fragment1视图后的activity1。 我正在使用rxandroid,sublibrary rxlifecycle组件和android,但我还在学习阶段,stackoverflow上甚rx-lifecycle没有rx-lifecycle标签,所以我仍然在努力理解这个库的流程.. 编辑 我不喜欢使用EventBus,就像每个人大喊大叫做某事一样,所以Rxjava Observable方法会很有用