如何在backstack中添加最新的片段实例(如果我不知道片段标签和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 ??
Run Code Online (Sandbox Code Playgroud) 我正在使用兼容包来使用Android 2.2中的Fragments.当使用片段,并在它们之间添加转换到backstack时,我想实现一个活动的onResume的相同行为,即,在弹出一个片段到达"前景"(用户可见)之后backstack,我想在片段中激活某种回调(例如,对共享UI资源执行某些更改).
我看到片段框架中没有内置回调.为了达到这个目的,有没有好的做法?
compatibility android android-fragments android-3.0-honeycomb back-stack
我有2个活动:Main和List.
从Main您可以打开List; 从列表中,您可以打开Main.
我想它,以便名单的每一个开放并没有得到保存到"历史".因此,从Main按回不能返回List.
可能吗?
我有一个活动A,它调用片段Bf,它调用片段Cf. 我希望在调用Cf时将Bf放在backstack中,以便用户可以导航回它.但是,如果在Cf中按下特定按钮,我希望将Bf从后台堆叠中移除.这可能吗?
我看到有一个popBackStack()函数.但是,我对这将如何工作有点困惑.使用此功能是否安全?在Backstack上Bf之后是否有可能插入来自不同应用程序的活动?
另外,有没有办法改变backstack上片段的savedInstanceState?
我只是无法弄清楚如何使用模拟器在backstack上进行强大的测试.
我有一个片段(我会称之为pagerFragment),它被添加到后台并且可见.它拥有viewPager一个FragmentPagerAdapter.在FragmentPagerAdapter持有(假设)两个片段:A和B.
首先添加片段效果很好.
片段A有一个按钮,一旦点击,就会在后台堆叠中添加一个片段(C).
问题是:如果我添加该片段(C),然后单击返回,pagerAdapter则为空,我看不到里面的任何片段.
如果我使用hack,并破坏pagerFragments中的子片段(A和B)onDestroyView(),这解决了问题,虽然我不想使用这个hack.
任何想法可能是什么问题?
android android-fragments android-viewpager fragmentpageradapter back-stack
我在Android中有一个包含多个活动的应用程序,我希望用户能够通过按菜单按钮注销.我遇到的问题是
A)的Android不会让你终止应用程序和
B),即使我的用户发送给LoginActivity他们又可以随时按下背部和马上回以前的活动,他们是in.
我已经尝试使用以下两个标志启动Activity:
Intent intent = new Intent(this, LoginActivity.class);
intent.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
intent.setFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP);
startActivity(intent);
Run Code Online (Sandbox Code Playgroud)
我也亲自尝试过每一个.
我也打过电话finish()后startActivity(intent),我在另一个StackOverflow的问题读取.
我有一个活动,其中我经历了几个片段.在每个片段中,我都有几个视图(EditText, ListView, Map等).
如何保存当时显示的片段实例?我需要它在活动时工作onPause() --> onResume().当我从另一个片段(从backstack弹出)返回时,我需要它才能工作.
从主要的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 = getSupportFragmentManager();
FragmentTransaction transaction_1 = fragmentManager.beginTransaction();
transaction_1.replace(R.id.content_frame, fragment_1);
transaction_1.commit();
}}
Run Code Online (Sandbox Code Playgroud)
然后这是我的一个片段的代码:
public class Fragment_1 extends Fragment {
private EditText title;
private Button go_next;
@Override …Run Code Online (Sandbox Code Playgroud) 我正在开发一个使用标签实现的应用程序FragmentActivity.因为整个应用程序都需要选项卡,所以片段被广泛用于使应用程序在所有版本的android上兼容.
因此,我在可视化方面遇到了一个问题,即背板上存在哪些碎片.我确信有一种方法可以检索backstack上存在的片段列表.谢谢.
我试图在调用方法时加载一个新片段.此方法创建一个新片段并"替换"另一个片段:
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){
Log.i(TAG, "Added to the backstack");
fragmentTransaction.addToBackStack(TAG);
}
fragmentTransaction.commit();
Fragment f = getFragmentManager()
.findFragmentById(R.id.index);
Log.i(TAG, "after commit, frag is "+ f);
}
}
Run Code Online (Sandbox Code Playgroud)
这很好,直到我回去.当我回去时,应删除最后一个片段.在我要实现活动方法之前
public void onBackPressed(){} …Run Code Online (Sandbox Code Playgroud) 我可以savedInstanceState()在删除片段时使用保存状态,然后在从后端堆栈弹出片段时恢复状态吗?当我从后台堆栈恢复片段时,savedInstanceState包始终为null.
现在,app流程是:创建片段 - >删除片段(添加到后台堆栈) - >从后台堆栈恢复的片段(savedInstanceState bundle为null).
这是相关代码:
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);
}
Run Code Online (Sandbox Code Playgroud)
我认为问题是onSavedInstanceState()当被删除并被添加到后台堆栈时永远不会被调用.如果我不能使用onsavedInstanceState(),还有另一种方法来解决这个问题吗?