Questions tagged «android-fragments»

片段代表Android应用程序中可重用的行为或部分用户界面。

17
Android 4.2:具有嵌套片段的后堆栈行为
在Android 4.2中,支持库获得了对嵌套片段的支持,请参见此处。我玩过它,发现了一个关于back stack和getChildFragmentManager()的有趣行为/错误。当使用getChildFragmentManager()和addToBackStack(String name)时,通过按“后退”按钮,系统不会将后退堆栈运行到上一个片段。另一方面,当使用getFragmentManager()和addToBackStack(String name)时,通过按返回按钮,系统将返回到上一个片段。 对我来说,这种行为是意外的。通过按设备上的“后退”按钮,我希望最后一个添加到后堆栈的片段都会弹出,即使该片段是在儿童片段管理器中添加到后堆栈的。 这种行为正确吗?这是一个错误吗?有没有解决此问题的方法? getChildFragmentManager()的示例代码: public class FragmentceptionActivity extends FragmentActivity { @Override protected void onCreate(Bundle arg0) { super.onCreate(arg0); final FrameLayout wrapper1 = new FrameLayout(this); wrapper1.setLayoutParams(new FrameLayout.LayoutParams( FrameLayout.LayoutParams.MATCH_PARENT, FrameLayout.LayoutParams.MATCH_PARENT)); wrapper1.setId(1); final FrameLayout.LayoutParams params = new FrameLayout.LayoutParams( FrameLayout.LayoutParams.MATCH_PARENT, FrameLayout.LayoutParams.WRAP_CONTENT); params.topMargin = 0; final TextView text = new TextView(this); text.setLayoutParams(params); …

3
进一步了解setRetainInstance(true)
什么究竟,当你调用发生setRetainInstance(true)在Fragment?该文档实际上不存在,这似乎是非常重要的功能。具体来说,我想知道这个序列(我组成的)中有多少是正确的: 用户旋转设备。 该片段与分离Activity,Fragment.onDetach()并被调用。 活动被破坏;Activity.onDestroy()叫做。 所述Activityjava对象被删除(如果可能,通过GC)。 Activity创建了一个新的java对象;它的构造函数,并被onCreate()调用。 在其中,Activity.onCreate()我们要么setContentView(...)设置包含片段的布局,要么FragmentTransaction 用于添加片段。 我真的不太确定,但是我认为android足够聪明,可以找到旧的片段,然后调用Fragment.onAttach()以将其重新附加到新片段上Activity 接下来(或之前?谁知道?)Activity.onResume()被调用。 那是正确的吗?即使我FragmentTransaction.add(new MyFragment(), ...)是第一次使用Android,Android是否也足够智能以找到旧片段?如果是这样,如何避免在其中添加另一个片段onCreate()?我需要做这样的事情吗: if (getSupportFragmentManager().findFragmentByTag("foo") == null) { FragmentTransaction ft = getSupportFragmentManager().beginTransaction(); ft.add(new FooFragment(), "foo").commit(); }

10
如何从片段获取工具栏?
我ActionBarActivity有NavigationDrawer和使用support_v7 Toolbar的动作条。在我的片段之一中,工具栏具有自定义视图。在其他片段中Toolbar应显示标题。 如何Toolbar从片段中获取用于定制的实例?我可以使用获取ActionBar getActivity().getActionBar(),但是如果我调用setTitle()该实例ActionBar,它什么也不做。 UPD: 就我而言 ((ActionBarActivity) getActivity()).getSupportActionBar().setTitle(); (正如MrEngineer13所说)在第一次创建片段时不起作用,因为我是从onHiddenChanged()调用它的。现在,我向onCreateView()添加了一个,并且工作正常。

7
在片段中未调用OnCreateOptionsMenu()
我有一个应用程序,其中一个活动水平放置了2个片段。 在我的活动中,我使用onCreateOptionsMenu()能显示操作栏选项菜单的菜单夸大了菜单。但是,当我尝试从片段之一更新操作栏菜单项时,onCreateoptionsmenu()不会调用。因此,我无法更新操作栏选项菜单。 我活动中的代码如下: myActivity.java package com.andr.androidtablelist; import java.io.IOException; import android.app.ActionBar; import android.app.Activity; import android.os.Bundle; import android.view.Menu; import android.view.MenuInflater; import android.view.MenuItem; import android.widget.Toast; import com.andr.fragments.ListLeftFragment; import com.andr.utils.DBHelper; public class TabletActivity extends Activity { ActionBar actionBar = null; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); DBHelper dbhelper; dbhelper = new DBHelper(this); try …

16
片段不会被替换,而是放在前一个之上
活动: FragmentTransaction transaction = getSupportFragmentManager().beginTransaction(); Fragment1 fragment = new Fragment1(); Fragment2 fragment2 = new Fragment2(); transaction.replace(R.id.Fragment1, fragment); transaction.addToBackStack(null); transaction.commit(); FragmentTransaction transaction2 = getSupportFragmentManager().beginTransaction(); transaction2.replace(R.id.Fragment1, fragment2); transaction2.addToBackStack(null); transaction2.commit(); 视图中的代码: <fragment android:id="@+id/Fragment1" android:name="com.landa.fragment.Fragment1" android:layout_width="wrap_content" android:layout_height="wrap_content" android:layout_alignParentBottom="true" android:layout_alignParentLeft="true" android:layout_below="@+id/include1" /> 问题是,内容并没有真正被替换-它被放在顶部(因此重叠)。 当我单击返回时,第一个片段正确显示(没有第二个片段),但是最初两个片段都是可见的(我只希望最后一个片段可见)。 我在这里想念什么?

16
获取Backstack中的最新片段
如何获得最新的片段实例添加到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 ??

5
片段交易动画:滑入和滑出
我已经检查了一些片段之间的动画交易的教程。我已经将此方法用于动画,并且可以正常工作: fragmentTransaction.setCustomAnimations(android.R.anim.slide_in_left, android.R.anim.slide_out_right); 但是我想反转该动画:旧片段向左滑动,新片段向右滑动,但是R.anim文件值似乎对我的范围没有用。 我该怎么做?

6
在Android中使用片段而不是视图有什么好处?
为进行开发时Android,您可以将目标(或最低)sdk设置为4(API 1.6),并添加android兼容性软件包(v4)以添加对的支持Fragments。昨天,我这样做了,并成功实现Fragments了可视化来自自定义类的数据。 我的问题是:与Fragments仅从自定义对象获取View并仍支持API 1.5相比,使用它有什么好处? 例如,假设我有Foo.java类: public class Foo extends Fragment { /** Title of the Foo object*/ private String title; /** A description of Foo */ private String message; /** Create a new Foo * @param title * @param message */ public Foo(String title, String message) { this.title = title; …

6
从片段ActionBarCompat内部获取getSupportActionBar
我正在启动一个使用AppCompat/ActionBarCompatin v7支持库的新项目。我试图弄清楚如何getSupportActionBar在片段中使用from。我托管片段的活动可以扩展ActionBarActivity,但是我没有看到类似的Fragments支持类。 从我的片段中 public class CrimeFragment extends Fragment { //... getActivity().getSupportActionBar().setSubtitle(R.string.subtitle); // getSupportActionBar is not defined in the v4 version of Fragment //... } 使用它的Google页面(http://android-developers.blogspot.in/2013/08/actionbarcompat-and-io-2013-app-source.html)表示,该v4片段应该没有变化。我是否需要将所有getActivity()呼叫投射到ActionBarActivity?这似乎是糟糕的设计。

16
嵌套片段在过渡动画期间消失
这里的情景:活动包含片段A,又使用getChildFragmentManager()添加片段A1,并A2在其onCreate像这样: getChildFragmentManager() .beginTransaction() .replace(R.id.fragmentOneHolder, new FragmentA1()) .replace(R.id.fragmentTwoHolder, new FragmentA2()) .commit() 到目前为止,一切都很好,一切正常。 然后,我们在Activity中运行以下事务: getSupportFragmentManager() .beginTransaction() .setCustomAnimations(anim1, anim2, anim1, anim2) .replace(R.id.fragmentHolder, new FragmentB()) .addToBackStack(null) .commit() 在过渡期间,enter片段的动画B正确运行,但片段A1和A2完全消失。当我们使用“后退”按钮还原事务时,它们会正确初始化并在popEnter动画过程中正常显示。 在我的简短测试中,它变得很奇怪-如果我为子片段设置动画(请参见下文),则exit在添加片段时动画会间歇性地运行B getChildFragmentManager() .beginTransaction() .setCustomAnimations(enter, exit) .replace(R.id.fragmentOneHolder, new FragmentA1()) .replace(R.id.fragmentTwoHolder, new FragmentA2()) .commit() 我要实现的效果很简单-我想运行片段(anim2)上的exit(或应该是popExit?)动画,A从而对整个容器(包括其嵌套的子代)进行动画处理。 有什么方法可以实现? 编辑:请在这里找到一个测试用例 Edit2:感谢@StevenByle促使我继续尝试使用静态动画。显然,您可以基于每个操作设置动画(不是整个事务的全局动画),这意味着子级可以具有不确定的静态动画集,而其父级可以具有不同的动画,并且整个事情可以在一个事务中完成。请参阅下面的讨论和更新的测试用例项目。

5
片段onCreateView和onActivityCreated调用了两次
我正在使用Android 4.0 ICS和片段开发应用程序。 考虑一下ICS 4.0.3(API级别15)API的演示示例应用程序中的以下修改示例: public class FragmentTabs extends Activity { private static final String TAG = FragmentTabs.class.getSimpleName(); @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); final ActionBar bar = getActionBar(); bar.setNavigationMode(ActionBar.NAVIGATION_MODE_TABS); bar.setDisplayOptions(0, ActionBar.DISPLAY_SHOW_TITLE); bar.addTab(bar.newTab() .setText("Simple") .setTabListener(new TabListener<SimpleFragment>( this, "mysimple", SimpleFragment.class))); if (savedInstanceState != null) { bar.setSelectedNavigationItem(savedInstanceState.getInt("tab", 0)); Log.d(TAG, "FragmentTabs.onCreate tab: …

11
java.lang.IllegalStateException:指定的子代已经有一个父代
当我第一次实例化片段时,我正在使用片段。但是我第二次遇到这个例外。我找不到发生错误的行? 04-04 08:51:54.320: E/AndroidRuntime(29713): FATAL EXCEPTION: main 04-04 08:51:54.320: E/AndroidRuntime(29713): java.lang.IllegalStateException: The specified child already has a parent. You must call removeView() on the child's parent first. 04-04 08:51:54.320: E/AndroidRuntime(29713): at android.view.ViewGroup.addViewInner(ViewGroup.java:3013) 04-04 08:51:54.320: E/AndroidRuntime(29713): at android.view.ViewGroup.addView(ViewGroup.java:2902) 04-04 08:51:54.320: E/AndroidRuntime(29713): at android.view.ViewGroup.addView(ViewGroup.java:2859) 04-04 08:51:54.320: E/AndroidRuntime(29713): at android.view.ViewGroup.addView(ViewGroup.java:2839) 04-04 08:51:54.320: E/AndroidRuntime(29713): …

13
使用FragmentPagerAdapter时如何获取现有片段
我在使片段通过Activity(使用FragmentPagerAdapter)作为帮助程序类相互通信时遇到困难,该帮助程序类实现了选项卡的管理以及将a ViewPager和关联的关联的所有详细信息TabHost。我已经实现FragmentPagerAdapter了与Android示例项目Support4Demos提供的相同的方法。 主要问题是,FragmentManager当我既没有ID也没有Tag时,如何获得特定片段?FragmentPagerAdapter正在创建片段并自动生成ID和代码。

11
片段生命周期-在显示/隐藏时调用哪种方法?
我正在使用以下方法通过显示/隐藏片段在片段之间(在我的NavigationDrawer中)进行切换。 protected void showFragment(int container, Fragment fragment, String tag, String lastTag, boolean addToBackStack ) { FragmentManager fragmentManager = getSupportFragmentManager(); FragmentTransaction transaction = fragmentManager.beginTransaction(); if ( lastTag != null && !lastTag.equals("")) { Fragment lastFragment = fragmentManager.findFragmentByTag( lastTag ); if ( lastFragment != null ) { transaction.hide( lastFragment ); } } if …

6
如何在Fragments中使用setArguments()和getArguments()方法?
我有2个片段:(1)Frag1(2)Frag2。 片段1 bundl = new Bundle(); bundl.putStringArrayList("elist", eList); Frag2 dv = new Frag2(); dv.setArguments(bundl); FragmentTransaction ft = getFragmentManager().beginTransaction(); ft.replace(R.id.the_fragg,dv); ft.show(getFragmentManager().findFragmentById(R.id.the_fragg)); ft.addToBackStack(null); ft.commit(); 如何在Frag2中获取此数据?

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.