Tag: 回栈

savedInstanceState从还原堆栈中恢复片段时

我可以使用savedInstanceState()来保存删除一个片段时的状态,然后恢复当我从后面堆栈popup片段的状态? 当我从后端堆栈恢复片段时,savedInstanceState bundle始终为空。 现在,应用程序stream是:片段创build – >片段删除(添加到后面的堆栈) – >从后面的堆栈(savedInstanceState包是空的)恢复的片段。 这是相关的代码: public void onActivityCreated(Bundle savedInstanceState) { super.onCreate(savedInstanceState); Bundle bundle = getArguments(); Long playlistId = bundle.getLong(Constants.PLAYLIST_ID); int playlistItemId = bundle.getInt(Constants.PLAYLISTITEM_ID); if (savedInstanceState == null) { selectedVideoNumber = playlistItemId; } else { selectedVideoNumber = savedInstanceState.getInt("SELECTED_VIDEO"); } } public void onSaveInstanceState(Bundle outState) { super.onSaveInstanceState(outState); outState.putInt(Constants.SELECTED_VIDEO, selectedVideoNumber); } 我认为这个问题是, onSavedInstanceState()在被移除并被添加到后端堆栈时从不被调用。 如果我不能使用onsavedInstanceState(),是否有另一种方法来解决这个问题?

Android:片段backStack

我试图加载一个新的片段,当一个方法被调用。 这个方法创build一个新的片段并“replace”另一个片段: private void showTestFragment(Fragment oldFragment, boolean addBackStack, BaseAdapter adapter, int position) { Cursor cursor = (Cursor)adapter.getItem(position); if(cursor != null){ int idx = cursor.getColumnIndexOrThrow(Episode._ID); long rowId = cursor.getLong(idx); FragmentManager fragmentManager = getFragmentManager(); FragmentTransaction fragmentTransaction = fragmentManager.beginTransaction(); if(oldFragment != null){ Log.i(TAG, "Removing the old fragment"); fragmentTransaction.remove(oldFragment); } TestFragment testFragment = new TestFragment(); testFragment.setId(rowId); fragmentTransaction.add(android.R.id.content, testFragment); if(addBackStack){ […]

在后台获取最新的片段

我怎样才能得到最新的片段实例添加在背后(如果我不知道片段标签&ID)? FragmentManager fragManager = activity.getSupportFragmentManager(); FragmentTransaction fragTransacion = fragMgr.beginTransaction(); /****After add , replace fragments (some of the fragments are add to backstack , some are not)***/ //HERE, How can I get the latest added fragment from backstack ??

添加到后端堆栈时,如何维护碎片状态?

我写了一个虚拟活动,在两个片段之间切换。 当你从FragmentA到FragmentB时,FragmentA被添加到后端堆栈。 然而,当我回到FragmentA(通过按回),一个全新的FragmentA被创build,并且它所处的状态已经丢失。 我觉得我跟这个问题是一样的,但是我已经包含了一个完整的代码示例来帮助解决这个问题: public class FooActivity extends Activity { @Override public void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); final FragmentTransaction transaction = getFragmentManager().beginTransaction(); transaction.replace(android.R.id.content, new FragmentA()); transaction.commit(); } public void nextFragment() { final FragmentTransaction transaction = getFragmentManager().beginTransaction(); transaction.replace(android.R.id.content, new FragmentB()); transaction.addToBackStack(null); transaction.commit(); } public static class FragmentA extends Fragment { @Override public View onCreateView(LayoutInflater inflater, ViewGroup […]

片段onResume()&onPause()不在栈上调用

我在活动中有多个片段。 在一个button上单击我开始一个新的片段,将其添加到后台堆栈。 我自然希望调用当前Fragment和onResume()的新片段的onPause()方法。 那么它不会发生。 LoginFragment.java public class LoginFragment extends Fragment{ @Override public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) { final View view = inflater.inflate(R.layout.login_fragment, container, false); final FragmentManager mFragmentmanager = getFragmentManager(); Button btnHome = (Button)view.findViewById(R.id.home_btn); btnHome.setOnClickListener(new View.OnClickListener() { public void onClick(View view){ HomeFragment fragment = new HomeFragment(); FragmentTransaction ft2 = mFragmentmanager.beginTransaction(); ft2.setCustomAnimations(R.anim.slide_right, R.anim.slide_out_left , […]

Android – 保存/恢复片段状态

我有一个活动,我经历了几个片段。 在每个片段中,我有几个视图( EditText, ListView, Map等)。 我怎样才能保存在那个时候显示的片段的实例? 当activity是onPause() –> onResume()时,我需要它工作。 另外我需要它的工作,当我从另一个片段(从后台popup)返回。 从主要Activity我叫第一个片段,然后从我打电话给下一个片段。 代码为我的活动: public class Activity_Main extends FragmentActivity{ public static Fragment_1 fragment_1; public static Fragment_2 fragment_2; public static Fragment_3 fragment_3; public static FragmentManager fragmentManager; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.main); fragment_1 = new Fragment_1(); fragment_2 = new Fragment_2(); fragment_3 = new Fragment_3(); fragmentManager = […]

片段onResume从后面堆栈

我正在使用兼容性包来使用Android 2.2的Fragments。 当使用片段,并添加他们之间的转换到后台,我想实现一个activity的onResume相同的行为,即每当一个片段被带到“前景”(对用户可见)之后popupbackstack,我想要在片段中激活某种callback(例如,在共享的UI资源上执行某些更改)。 我看到片段框架内没有内置的callback。 为了达到这个目的,有没有好的做法?

以编程方式返回到后面的片段

说我有一个活动,有碎片添加编程: private void animateToFragment(Fragment newFragment, String tag) { FragmentTransaction ft = getFragmentManager().beginTransaction(); ft.replace(R.id.fragment_container, newFragment, tag); ft.addToBackStack(null); ft.commit(); } 什么是返回到可见的前一个片段的最佳方法? 我发现在Android的button点击触发后退buttonfunction,但我想模拟一个后退键事件是不正确的方式来解决它(我也不能让它工作): dispatchKeyEvent(new KeyEvent(KeyEvent.ACTION_DOWN, KeyEvent.KEYCODE_BACK)); 调用finish()只是closures了我不感兴趣的活动。 有没有更好的方法去做这件事?

Android Fragment反向堆栈的问题

我遇到了一个很大的问题,android片段backstack似乎工作的方式,将非常感激的任何帮助提供。 想象一下你有3个碎片 [1] [2] [3] 我希望用户能够导航[1] > [2] > [3]但是在返回的路上(按下后退button) [3] > [1] 。 正如我想象的那样,这可以通过在创build将fragment [2]带入XML中定义的片段持有者的事务时不调用addToBackStack(..)来实现。 这个现实似乎是,如果当用户按下[3]上的button时我不想再次出现,我不能在显示片段[3]的事务中调用addToBackStack 。 这似乎完全违反直觉(也许来自iOS世界)。 无论如何,如果我这样做的话,当我从[1] > [2]出发并按回时,如预期的那样回到[1] 。 如果我走[1] > [2] > [3] ,然后按回,我会跳回到[1] (如预期的那样)。 现在,当我尝试从[1]再次跳到[2]时,会出现奇怪的行为。 首先[3]在[2]进入视野之前简要显示。 如果在这一点上按回来, [3]显示,如果我再次按回应用程序退出。 任何人都可以帮助我理解这里发生了什么? 这里是我的主要活动布局XML文件: <?xml version="1.0" encoding="utf-8"?> <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" android:layout_width="fill_parent" android:layout_height="fill_parent" android:orientation="vertical" > <fragment android:id="@+id/headerFragment" android:layout_width="match_parent" android:layout_height="wrap_content" class="com.fragment_test.FragmentControls" > <!– Preview: layout=@layout/details –> […]

如果存在,如何从BackStack恢复片段

我正在学习如何使用片段。 我有三个Fragment初始化在顶部的实例。 我将这个片段添加到这样一个活动中: 声明和初始化: Fragment A = new AFragment(); Fragment B = new BFragment(); Fragment C = new CFragment(); 更换/添加: FragmentTransaction ft = getSupportFragmentManager().beginTransaction(); ft.replace(R.id.content_frame, A); ft.addToBackStack(null); ft.commit(); 这些片段正常工作。 每个片段都附加到活动中,并保存到后端堆栈,没有任何问题。 所以当我启动A , C和B ,堆栈如下所示: | | |B| |C| |A| ___ 而当我按下“后退”button, B被销毁, C被恢复。 但是,当我第二次启动片段A时,不是从后端堆栈恢复,而是在后端堆栈的顶部添加 | | |A| |C| |A| ___ 但是我想恢复A并且销毁所有的碎片(如果有的话)。 其实,我只是喜欢默认的后退堆栈行为。 我如何做到这一点? 预计:( A应该恢复,顶部碎片应该被销毁) […]