Tag: android fragments

MapView中的片段(蜂窝)

现在,最终的SDK与谷歌apis – 什么是最好的方式来创build一个MapView的片段? MapView需要MapActivity才能正常工作。 让pipe理碎片的活动从MapActivityinheritance(糟糕的解决scheme,因为它违背碎片自包含的想法)并使用常规的基于xml的布局不起作用。 我在MapActivity.setupMapView()中得到一个NullPointerException: E / AndroidRuntime(597):引起:java.lang.NullPointerException E / AndroidRuntime(597):com.google.android.maps.MapActivity.setupMapView(MapActivity.java:400) E / AndroidRuntime(597):com.google.android.maps.MapView。(MapView.java:289) E / AndroidRuntime(597):com.google.android.maps.MapView。(MapView.java:264) E / AndroidRuntime(597):com.google.android.maps.MapView。(MapView.java:247) 我的第二个想法是以编程方式创buildMapView,并将相关活动(通过getActivity())作为上下文传递给MapView构造函数。 不起作用: E / AndroidRuntime(834):引起:java.lang.IllegalArgumentException:MapViews只能在MapActivity的实例内部创build。 E / AndroidRuntime(834):com.google.android.maps.MapView。(MapView.java:291) E / AndroidRuntime(834):com.google.android.maps.MapView。(MapView.java:235) E / AndroidRuntime(834):在de.foo.FinderMapFragment.onCreateView(FinderMapFragment.java:225) E / AndroidRuntime(834):在android.app.FragmentManagerImpl.moveToState(FragmentManager.java:708) E / AndroidRuntime(834):在android.app.FragmentManagerImpl.moveToState(FragmentManager.java:900) E / AndroidRuntime(834):在android.app.FragmentManagerImpl.addFragment(FragmentManager.java:978) E / AndroidRuntime(834):在android.app.Activity.onCreateView(Activity.java:4090) E / AndroidRuntime(834):在android.view.LayoutInflater.createViewFromTag(LayoutInflater.java:664) 真的应该有像MapFragment的照顾后台线程MapView需要我猜…那么目前最好的做法是什么呢? 感谢德国Valentin的问候

java.lang.IllegalStateException:指定的子项已经有父项

当我第一次实例化片段时,我正在使用片段。 但第二次我得到这个例外。 我无法find我得到错误的路线? 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): at android.support.v4.app.NoSaveStateFrameLayout.wrap(Unknown Source) […]

从父Activity调用Fragment方法

我在Android Fragments Dev Guide中看到,“活动可以通过使用findFragmentById()或findFragmentByTag()从FragmentManager获取对Fragment的引用来调用片段中的方法。 下面的例子展示了如何得到一个片段引用,而不是如何调用片段中的特定方法。 任何人都可以举例说明如何做到这一点? 我想从父活动的片段调用一个特定的方法。 谢谢。

Android碎片:何时使用隐藏/显示或添加/删除/replace?

假设我希望在另一个容器视图中replace当前片段。 使用replace是更好吗… FragmentTransaction ft = getSupportFragmentManager().beginTransaction(); ft.replace(R.id.fragment_container, newFragment, null); ft.commit(); …或以下,显示和隐藏? FragmentTransaction ft = getSupportFragmentManager().beginTransaction(); ft.hide(oldFragment); ft.show(newFragment); ft.commit(); 是这样做更有效的方法之一? 找不到关于何时使用这些方法的很多信息,或者它们如何影响碎片的生命周期。 谢谢!

如何在BackStack上反转片段animation?

我以为当使用下面的代码使用片段时,后退button被按下时,系统将会在后台堆栈上反转animation: FragmentManager fm = getFragmentManager(); FragmentTransaction ft = fm.beginTransaction(); ft.setCustomAnimations(R.anim.slide_in, R.anim.hyperspace_out); ft.replace(R.id.viewContainer, new class(), "layout").addToBackStack(null).commit();

Android 4.2:使用嵌套的片段返回堆栈行为

在Android 4.2中,支持库得到了对嵌套片段的支持。 我玩过它,并发现一个有趣的行为/关于返回堆栈和getChildFragmentManager()的错误 。 当使用getChildFragmentManager()和addToBackStack(String name)时,通过按下后退button,系统不会将后退堆栈运行到前一个片段。 另一方面,当使用getFragmentManager()和addToBackStack(String name)时,通过按下后退button,系统返回到前一个片段。 对我而言,这种行为是意想不到的。 通过按下设备上的后退button,我期望即使片段被添加到孩子的片段pipe理器中的后退堆栈中,最后添加的片段也将被popup。 这种行为是正确的吗? 这种行为是一个错误? 有没有解决这个问题的方法? 带有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); […]

FragmentPagerAdapter getItem不被调用

我不能在FragmentPagerAdapter中重用片段。使用destroyItem()方法,它正在删除片段,但仍然不会再调用getItem()..只有2-3图像,所以我使用FragmentPagerAdapter而不是FragmentStatePagerAdapter .. public class ExamplePagerAdapter extends FragmentPagerAdapter { ArrayList < String > urls; int size = 0; public ExamplePagerAdapter(FragmentManager fm, ArrayList < String > res) { super(fm); urls = res; size = urls.size(); } @Override public int getCount() { if (urls == null) { return 0; } else { return size; } } @Override public […]

android片段onRestoreInstanceState

我缺less的东西或做Fragment s没有一个onRestoreInstanceState()方法? 如果不是,我该如何去做类似的事情呢?

进一步了解setRetainInstance(true)

当你在一个Fragment上调用setRetainInstance(true)时究竟发生了什么? 文档几乎是不存在的,这似乎是一个非常重要的function。 具体而言,我想知道这个序列(我编造的)有多less是正确的: 用户旋转设备。 该片段与Activity分离,并调用Fragment.onDetach() 。 活动被破坏; Activity.onDestroy()被调用。 Activity java对象被删除(如果可能的话,由GC)。 一个新的Activity java对象被创build; 它的构造函数和onCreate()被调用。 在Activity.onCreate()我们要么有setContentView(…)来设置一个包含片段的布局,要么我们使用FragmentTransaction来添加一个片段。 我真的不知道这一点,但我认为Android智能足以find旧的片段,并调用Fragment.onAttach()重新附加到新的Activity 接下来(或之前?谁知道?) Activity.onResume()被调用。 那是对的吗? 即使我第一次显式地使用FragmentTransaction.add(new MyFragment(), …) ,Android是否足够聪明地find旧的片段? 如果是这样,我怎么避免在onCreate()添加另一个片段? 我需要做这样的事吗? if (getSupportFragmentManager().findFragmentByTag("foo") == null) { FragmentTransaction ft = getSupportFragmentManager().beginTransaction(); ft.add(new FooFragment(), "foo").commit(); } 为什么没有在文档中的这一点? 哈不,只是开玩笑,不要回答!

Android – 设置片段ID

如何设置一个Fragment的Id以便我可以使用getSupportFragmentManager().findFragmentById(R.id.–) ?