Tag: android fragments

onClick调用Activity内部的片段

我现在正在封装一个片段,并遇到一个难以谷歌的问题。 在我的片段里面有一些带有onClick属性的button,但是它们在Activity上被调用,而在android系统上被调用 – 这使得封装有点笨拙。 有没有办法从onClick调用reflection的东西来调用片段? 我目前看到的唯一解决scheme是不使用xml中的onClick,并通过代码设置片段内的点击侦听器。

片段,setRetainInstance(true)和线程库

在这里 ,Dianne说通过onRetainNonConfigurationInstance()保留对象的旧方法现在已经过时了,因为你可以通过configuration改变来保留Fragment实例。 在这里 ,在片段的API演示中,它展示了如何在configuration更改后使用此方法维护线程。 我发现,在configuration更改期间,如果Fragment可能没有附加到任何活动,并且线程完成了它的工作,则可以调用wait()以便它不会尝试传递结果,而Activity不是连接。 我发现这非常有用,也是一个很好的方法来缓解Android方向更改中的一个更为棘手的问题。 但是,如果您使用的是线程库(例如,使用线程执行程序的API库),则无法在所述线程上wait() ,我们如何才能使用这个新function? 我们如何确保消息不会在没有附加活动的情况下传递? 我一直在想一种方法,可能会排队消息,并在附加新的活动时交付,但我想打你们,看看你是否已经想出了一些解决scheme。 另外请注意,我查看了LoaderManager API,看起来好像是显示一个Activity时需要加载的数据,而不是基于事件的事件,比如通过buttonlogin等等。

片段标准转换不是animation

我正在使用v4 android兼容库来开发一个专门用于Android 2.2设备的片段。 一切工作都应该如此,除了我不能得到任何animation工作,甚至没有标准的animation。 码: FragmentTransaction ft = getSupportFragmentManager().beginTransaction(); ft.setTransition(FragmentTransaction.TRANSIT_FRAGMENT_FADE); ABCFragment abcFragment = new ABCFragment(); ft.replace(R.id.main_frame_layout_fragment_holder,abcFragment); ft.addToBackStack(null); ft.commit(); 而不是使用过境animation,片段冻结了大约一秒,刚刚消失,新的出现。 使用: ft.setCustomAnimations(android.R.anim.slide_in_left,android.R.anim.slide_out_right); 也不起作用。 XML: <?xml version="1.0" encoding="utf-8"?> <RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android" xmlns:app="http://schemas.android.com/apk/res/com.synergygb.mycustomapp" android:id="@+id/LinearLayout01" android:layout_width="fill_parent" android:layout_height="fill_parent" android:orientation="vertical" android:gravity="bottom"> <FrameLayout android:layout_width="fill_parent" android:layout_height="fill_parent" android:id="@+id/main_frame_layout_fragment_holder"> </FrameLayout> <!– OTHER FIXED UI ELEMENTS–> </RelativeLayout> 我看到自定义animation在兼容性库中被打破了,但似乎没有人遇到与标准转换有关的问题。 我已经在3.2.1摩托罗拉Xoom,2.3 Galaxy Tab 7“,2.2模拟器,甚至在2.3.4的HTC G2上testing过。 这里有什么可能是错的?

试图从视图中删除片段给我mNextAnim NullPointerException

我有3个片段,一个NavigationDrawer,一个MapFragment和一个用户定义的“MapInfoFragment”。 我希望“MapInfoFragment”在某些事件上在MapFragment顶部显示为半透明,并在其他事件上消失。 我真的不在乎是否我每次都完全删除片段并创build一个新片段,或者只是更改显示的可见性和信息。 目前我只是试图使用FragmentManager的.hide()函数,但我也试过.remove和.detach具有类似的结果。 错误: 03-18 14:28:10.965 24711-24711/com.[packageName].asTest D/AndroidRuntime﹕ Shutting down VM 03-18 14:28:10.965 24711-24711/com.[packageName].asTest E/AndroidRuntime﹕ FATAL EXCEPTION: main Process: com.[packageName].asTest, PID: 24711 java.lang.NullPointerException: Attempt to write to field 'int android.app.Fragment.mNextAnim' on a null object reference at android.app.BackStackRecord.run(BackStackRecord.java:658) at android.app.FragmentManagerImpl.execPendingActions(FragmentManager.java:1447) at android.app.FragmentManagerImpl$1.run(FragmentManager.java:443) at android.os.Handler.handleCallback(Handler.java:733) at android.os.Handler.dispatchMessage(Handler.java:95) at android.os.Looper.loop(Looper.java:136) at android.app.ActivityThread.main(ActivityThread.java:5017) at java.lang.reflect.Method.invoke(Native Method) at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:779) […]

从后面的堆栈中移除碎片

当一个平板电脑拿着肖像时,我有一个活动的3个片段。 但是,我在景观中只有2个这些碎片。 我遇到的问题是从纵向到横向的活动正在创build第三个片段。 我收到和错误,因为这个片段不能创build。 我已经确定这个片段正在创build,因为它在后面的堆栈。 我试图通过使用删除onDestroy方法中的片段 FragmentTransaction f = fragmentManager.beginTransaction(); f.remove(mf); f.commit(); 然而,我得到一个错误,说我不能在onSaveInstanceState后面使用这个函数 将这个片段从后面堆栈中取出的正确方法是什么? 更新 我应该补充一点,我遇到的问题是来自这个库的mapFragment https://github.com/petedoyle/android-support-v4-googlemaps 我用它的方式就是这样 mf = MapFragment.newInstance(1, true); ft = fragmentManager.beginTransaction(); ft.replace(R.id.mapContainer, mf); ft.setTransition(FragmentTransaction.TRANSIT_FRAGMENT_FADE); ft.addToBackStack("map"); ft.commit();

如何使DialogFragment宽度为Fill_Parent

你好我正在一个android应用程序,我正在使用DialogFragment来显示对话框,但其宽度是非常小的。 我怎样才能使这个宽度fill_parent它? public class AddNoteDialogFragment extends DialogFragment { public AddNoteDialogFragment() { // Empty constructor required for DialogFragment } @Override public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) { getDialog().setTitle(getString(R.string.app_name)); View view = inflater.inflate(R.layout.fragment_add_note_dialog, container); return view; } @Override public Dialog onCreateDialog(Bundle savedInstanceState) { Dialog dialog = super.onCreateDialog(savedInstanceState); // request a window without the title dialog.getWindow().requestFeature(Window.FEATURE_NO_TITLE); […]

如何清除android中的碎片背景

嗨如何清除片段回到堆栈使用下面的逻辑它不工作… for(int i = 0; i < mFragmentManager.getBackStackEntryCount(); ++i) { mFragmentManager.popBackStack(); } 帮我..

理解onTrimMemory(int level)

我最近读了这篇关于pipe理你的应用程序内存的文章 ,我强烈build议阅读它,如果你是一个AndroidDev,并从来没有这样做。 有很多好的做法,我从来没有碰到过的一件事是系统在每个Activity / Fragment上调用的onTrimMemory(int level)方法来通知应该释放或释放内存的事件。 这篇文章的引用如下: 请注意,只有在您的应用程序进程的所有UI组件被用户隐藏后,您的应用才会收到带有TRIM_MEMORY_UI_HIDDEN的onTrimMemory()callback 。 这与onStop()callback截然不同,当Activity实例变为隐藏时会调用该callback,即使用户移动到应用中的其他活动时也会发生这种情况。 因此,尽pipe您应该实现onStop()来释放活动资源(如networking连接)或取消注册广播接收器, 但通常不应释放您的UI资源,直到您收到onTrimMemory(TRIM_MEMORY_UI_HIDDEN) 。 这确保了如果用户从应用中的其他活动导航回来,您的UI资源仍然可以快速恢复活动。 我真的很有兴趣在我的应用程序中实现一个良好的内存pipe理,所以我期待以正确的方式实现onTrimMemory() 。 我只有几个问题: 在onStop()之后调用onTrimMemory(TRIM_MEMORY_UI_HIDDEN )? 在这种情况下,“释放你的UI资源”是什么意思? 只是为了清理Bitmapcaching,或者实际上删除并销毁视图树中的每个视图? 我通常在onDestroy()或onDestroyView()方法中销毁视图,我现在想知道如果我做对了。 是否有一个双/记者回到onTrimMemory(TRIM_MEMORY_UI_HIDDEN) ? 像onCreate-onDestroy , onStart-onStop , onCreateView-onDestroyView 。 我要求了解在应用程序onTrimMemory(TRIM_MEMORY_UI_HIDDEN)被调用之后,在Activity / Fragment之后如何恢复UI状态。

popup片段叠加而不popupPop-Animation

我使用以下代码在片段堆栈上推送一个片段: FragmentManager fragmentManager = getActivity().getSupportFragmentManager(); FragmentTransaction fragmentTransaction = fragmentManager.beginTransaction(); fragmentTransaction.setCustomAnimations(R.anim.slide_in_right, R.anim.slide_out_right, R.anim.slide_in_left, R.anim.slide_out_left); fragmentTransaction.replace(getId(), newFragment); fragmentTransaction.addToBackStack(null); fragmentTransaction.commit(); 这样,当片段堆栈popup时,例如通过按下后退button,播放片段popupanimation。 但是,在某些情况下,我想popup片段叠加而不显示该animation,例如,因为我刚刚从另一个活动返回,并希望一次显示前一个片段,而没有animation。 示例导航可能如下所示: 用户在开始屏幕上的根片段 他在根片段上select一个项目,然后显示一个新的片段来显示该项目的细节。 它使用一个片段事务来为推送和stream行案例设置animation(所以当用户按下后退button时,过渡是animation的) 从这个片段他开始了一个活动(不pipe什么原因)删除刚才显示的项目 当这个活动结束时,我想返回到根片段而不显示“细节片段”的“stream行animation” 有没有方法来popup片段的堆栈,而不玩指定的stream行animation?

IllegalStateException当更换一个片段

这是使用兼容包的小型Android 2.2testing应用程序。 这是(当然是错误的),我试图在接受点击时replace片段。 我试图用相同片段类的新(不同)实例来replace它。 正如我将解释它不按预期工作,我需要帮助: public class MainFragmentActivity extends FragmentActivity { … public void myAction(View view) { … RightFragment newRightFrag = RightFragment.newInstance(myNewOption); FragmentTransaction ft = getSupportFragmentManager().beginTransaction(); ft.setCustomAnimations(android.R.anim.fade_in, android.R.anim.fade_out); ft.replace(R.id.landscape_right_fragment, newRightFrag); ft.commit(); } } 你一定会看到我的错误是什么。 无论如何,让我们来多说一说应用程序应该做些什么: 风景定位: ——— ———- | L | R | -> click -> | L | R2 | ——— ———- 在横向方向上,活动有一个视图,有2个片段:“ leftLand […]