Questions tagged «android-fragments»

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

12
androidfragment-当另一个片段被推到其顶部时如何保存视图状态
在android中,一个片段(例如FragA)被添加到了backstack中,另一个片段(例如FragB)进入了顶部。现在回击FragA到顶部并被onCreateView()调用。现在,我FragA处于一种特殊的状态,然后FragB才被推上去。 我的问题是如何恢复FragA到以前的状态?有没有一种方法可以保存状态(例如在捆绑中说),如果可以,那么我应该重写哪种方法?

11
用活动组内的另一个片段替换一个片段
我在小组活动中有一个片段,我想用另一个片段替换它: FragmentTransaction ft = getActivity().getFragmentManager().beginTransaction(); SectionDescriptionFragment bdf = new SectionDescriptionFragment(); ft.replace(R.id.book_description_fragment, bdf); ft.setTransition(FragmentTransaction.TRANSIT_FRAGMENT_OPEN); ft.addToBackStack(null); ft.commit(); 在不使用活动组的情况下作为单独的项目完成时,它工作正常,当控件进入getview()时,每件事在log cat中工作都很好,但是没有视图可见,甚至没有任何异常出现,我希望将书详细信息片段由部分详细信息片段代替。 图书详细信息片段的XML具有id book_description_fragment,而节描述片段的xml具有id section_description_fragment。 上面的代码位于项目的onClick方法中,我希望当用户在水平滚动视图中点击项目时,片段会发生变化。

18
java.lang.IllegalStateException:onSaveInstanceState之后无法执行此操作
我正在为我的应用程序使用支持库。在我的FragmentActivity中,我使用AsyncTask从互联网下载数据。在onPreExecute()方法中,我添加一个片段,在onPostExecute()方法中,我再次将其删除。当方向在这两者之间改变时,出现上述异常。请看一下详细信息: private class onFriendAddedAsyncTask extends AsyncTask<String, Void, String> { DummyFragment dummyFragment; FragmentManager fm; FragmentTransaction ft; @Override protected void onPreExecute() { Log.v("MyFragmentActivity", "onFriendAddedAsyncTask/onPreExecute"); dummyFragment = DummyFragment.newInstance(); fm = getSupportFragmentManager(); ft = fm.beginTransaction(); ft.add(dummyFragment, "dummy_fragment"); ft.commit(); } @Override protected void onPostExecute(String result) { Log.v("MyFragmentActivity", "onFriendAddedAsyncTask/onPostExecute"); ft = fm.beginTransaction(); ft.remove(dummyFragment); ft.commit(); } @Override …

7
如何将变量从Activity传递到Fragment,然后传递回去?
我目前正在制作一个android应用,我想在活动和片段之间传递一个日期。我的活动有一个按钮,它将打开片段:DatePickerFragment。 在我的活动中,我显示一个日期,我想用该片段进行修改。所以我想将日期传递给日期选择器,然后将其发送回活动。 我尝试了很多解决方案,但是都没有用。简单的方法是传递一个参数,但这不能通过片段来完成。

3
防止ViewPager破坏屏幕外的视图
我有一个ViewPager连接到显示三个片段的FragmentPagerAdapter。当离开当前位置一个或多个滑动时,ViewPager似乎会破坏宿主片段的视图。 这些视图都是简单的列表,完全不需要这种优化,因此我想禁用它。这引起了一些视觉问题,因为列表中应用了布局动画,并且销毁并重新创建了这些动画,然后对其进行重放。它还每次都会显示滚动条简介动画(滚动条短暂可见以表明可以滚动),这可能会分散注意力,并且用户的当前滚动位置会在此过程中丢失。 在第一次滑动之前,它也不会加载第三个片段,这是有问题的,因为每个片段都处理自己的服务调用,我希望在活动加载时同时触发所有三个片段。延迟第三次服务呼叫并不理想。 有什么办法说服ViewPager停止这种行为,并将所有片段保留在内存中?

7
我可以将View pager与视图一起使用吗(不能与片段一起使用)
我ViewPager用于在之间滑动Fragments,但是我ViewPager可以在Views简单的XML布局之间滑动吗? 这是我Adapter的ViewPager 页面,用于在片段之间滑动: import java.util.List; import com.app.name.fragments.TipsFragment; import android.support.v4.app.Fragment; import android.support.v4.app.FragmentManager; import android.support.v4.app.FragmentPagerAdapter; import android.support.v4.app.FragmentTransaction; import android.view.ViewGroup; public class PageAdapter extends FragmentPagerAdapter { /** * */ List<Fragment> fragments; public PageAdapter(FragmentManager fm,List<Fragment> frags) { super(fm); fragments = frags; } @Override public Fragment getItem(int arg0) { // TODO Auto-generated method stub return …

7
当留下深度嵌套的堆栈时,这是清理Fragment back堆栈的正确方法吗?
我正在使用Android兼容性库来实现片段,并扩展了布局示例,以便片段包含触发另一个片段的按钮。 在左侧的选择窗格中,我有5个可选项目- A B C D E。 每个都FragmentTransaction:replace在详细信息窗格中加载一个片段(通过)-a b c d e 现在,我扩展了片段e以包含一个按钮,该按钮e1也可以在详细信息窗格中加载另一个片段。我已经对fragment e的onClick方法进行了如下操作: FragmentTransaction ft = getActivity().getSupportFragmentManager().beginTransaction(); ft.replace(R.id.details_frag, newFrag); ft.setTransition(FragmentTransaction.TRANSIT_FRAGMENT_OPEN); ft.addToBackStack(null); ft.commit(); 如果我进行以下选择: E - e - e1 - D - E 然后,片段e在详细信息窗格中。这很好,我想要的。但是,如果此时我按下back按钮,则无济于事。我必须单击两次,因为e1它仍在堆栈中。此外,单击后,在onCreateView中出现了空指针异常: 为了“解决”这个问题,无论何时A B C D E选择,我都添加了以下内容: FragmentManager fm = getActivity().getSupportFragmentManager(); for(int i = 0; i < fm.getBackStackEntryCount(); …

6
Gmail三段动画方案的完整工作示例?
TL; DR:我正在寻找一个完整的工作样本,该样本将被称为“ Gmail三片段动画”方案。具体来说,我们想从两个片段开始,如下所示: 在发生某些UI事件(例如,点击片段B中的某些内容)时,我们想要: 片段A从屏幕左侧滑出 片段B滑动到屏幕的左边缘并缩小以占据片段A空出的位置 片段C从屏幕右侧滑入并占据片段B空出的位置 并且,在按下“返回”按钮时,我们希望该组操作被逆转。 现在,我已经看到了很多部分实现。我将在下面回顾其中的四个。除了不完整之外,它们都有问题。 @Reto迈尔促成这种普遍的回答相同的基本问题,表明你会使用setCustomAnimations()一个FragmentTransaction。对于两个片段的场景(例如,您最初只看到片段A,并希望使用动画效果将其替换为新的片段B),我完全同意。然而: 由于您只能指定一个“入”和一个“出”动画,因此我看不到如何处理三片段场景所需的所有不同动画 在<objectAnimator>他的代码示例使用像素的硬连线的位置,这似乎给出不同的屏幕尺寸是不切实际的,但setCustomAnimations()需要动画资源,排除在Java中定义这些事情的可能性 我很茫然,以与事物对象的动画师规模的领带怎么样android:layout_weight的LinearLayout百分比分配空间迷惑不解 我一开始就对片段C的处理方式感到困惑(将GONE?android:layout_weight的0?预先动画化为0的比例? @Roman Nurik指出,您可以为任何属性设置动画,包括您自己定义的属性。这可以帮助解决固定位置的问题,而以发明自己的自定义布局管理器子类为代价。这对某些人有所帮助,但是我仍然对Reto的其余解决方案感到困惑。 该pastebin条目的作者显示了一些诱人的伪代码,基本上是说所有三个片段最初都将驻留在容器中,而片段C首先通过hide()事务操作隐藏。然后我们在UI事件发生时使用show()C和hide()A。但是,我看不到如何处理B更改大小这一事实。它还依赖于一个事实,即您显然可以将多个片段添加到同一容器中,而且我不确定从长远来看这是否是可靠的行为(更不用说它应该破坏了findFragmentById(),尽管我可以接受)。 这篇博文的作者指出,Gmail根本没有使用setCustomAnimations(),而是直接使用对象动画制作器(“您只需更改根视图的左边界+更改右视图的宽度”)。但是,这仍然是两段式解决方案AFAICT,实现再次显示了以像素为单位的硬接线尺寸。 我将继续解决这个问题,所以有一天我可能会自己回答,但我真的希望有人能为这个动画场景设计出三片段解决方案,并可以发布代码(或指向它的链接)。Android中的动画使我想拔头发,而那些看到我的人都知道这在很大程度上是徒劳的。

5
片段还是支持片段?
我正在开发一个支持Android> = 4.0的应用程序。它使用android.app包中的片段。由于我面临着4.0中较旧的片段实现(例如此问题)的问题,该问题已在支持库中修复,因此我正在考虑从支持库切换回片段实现,以获得更可靠和一致的实现。 你对这个有什么看法?在为Android 4开发时,您是否正在使用支持库中的片段,即使它们已经可用?

11
从父Activity调用Fragment方法
我在Android Fragments开发指南中看到,“活动可以通过使用findFragmentById()或从FragmentManager获取对Fragment的引用来调用片段中的方法findFragmentByTag()。” 下面的示例显示如何获取片段引用,而不显示如何调用片段中的特定方法。 谁能举例说明如何做到这一点?我想在父Activity的Fragment中调用特定方法。谢谢。

7
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; …

9
Android Fragment back stack的问题
我对android片段Backstack的工作方式遇到了一个很大的问题,对于提供的任何帮助将不胜感激。 假设您有3个片段 [1] [2] [3] 我希望用户能够导航[1] > [2] > [3]但在返回的途中(按返回按​​钮)[3] > [1]。 就像我想象的那样,这可以通过addToBackStack(..)在创建将片段[2]带入XML定义的片段持有者的事务时不调用来实现。 现实情况似乎是,如果我不想[2]在用户按下“后退”按钮时再次出现[3],则我不能调用addToBackStack显示片段的事务[3]。这似乎完全违反直觉(也许来自iOS世界)。 无论如何,如果我这样做,当我离开[1] > [2]并按回去时,我会按[1]预期到达。 如果我走了[1] > [2] > [3]然后按回去,我跳回了[1](按预期)。现在,当我尝试[2]从再次跳到时,就会发生奇怪的行为[1]。首先在[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 --> </fragment> <FrameLayout android:id="@+id/detailFragment" android:layout_width="match_parent" android:layout_height="fill_parent" /> 更新 …

5
片段中的runOnUiThread
我正在尝试将活动转换为片段。上的错误标记runOnUiThread。在过去: GoogleActivityV2来自Activity。类ExecuteTask中的runOnUiThread。类ExecuteTask嵌套在活动上。 (运行确定)现在: GoogleActivityV2来自Fragment。类ExecuteTask中的runOnUiThread。类ExecuteTask嵌套在活动上。(关于runOnUiThread的错误) 这是我的代码 public class GoogleActivityV2 extends SherlockMapFragment implements OnMapClickListener , OnMapLongClickListener , OnCameraChangeListener , TextWatcher { @Override public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState){ View rootView = inflater.inflate(R.layout.activity_googlev2, container, false); Init(); adapter = new ArrayAdapter<String>(getActivity(), android.R.layout.simple_dropdown_item_1line); textView = (AutoCompleteTextView) getView().findViewById(R.id.autoCompleteTextView1); return rootView; } public void onCameraChange(CameraPosition …

12
导航到Android中的另一个片段后如何清除导航堆栈
我在android中使用新的Navigation Architecture组件,并且在移至新片段后仍无法清除导航堆栈。 示例:我在loginFragment中,并且当我导航到home片段时,我希望从堆栈中清除此片段,以便用户在按“后退”按钮时不会返回到loginFragment。 我正在使用一个简单的NavHostFragment.findNavController(Fragment).navigate(R.id.homeFragment)进行导航。 当前代码: mAuth.signInWithCredential(credential) .addOnCompleteListener(getActivity(), new OnCompleteListener<AuthResult>() { @Override public void onComplete(@NonNull Task<AuthResult> task) { if (task.isSuccessful()) { NavHostFragment.findNavController(LoginFragment.this).navigate(R.id.homeFragment); } else { Log.w(TAG, "signInWithCredential:failure", task.getException()); } } }); 我尝试使用NavOptions在导航() ,但后退按钮仍然送我回loginFragment NavOptions.Builder navBuilder = new NavOptions.Builder(); NavOptions navOptions = navBuilder.setPopUpTo(R.id.homeFragment, false).build(); NavHostFragment.findNavController(LoginFragment.this).navigate(R.id.homeFragment, null, navOptions);

7
Android Fragment生命周期随方向变化而变化
使用兼容性包以Fragments为目标2.2。 重新编码活动以在应用程序中使用片段后,我无法进行方向更改/状态管理,因此我创建了一个具有单个FragmentActivity和单个Fragment的小型测试应用程序。 来自方向更改的日志很奇怪,有多个对片段OnCreateView的调用。 我显然丢失了一些东西-例如分离片段并重新附加它,而不是创建新实例,但是我看不到任何文档来表明我要去哪里。 任何人都可以告诉我我在做什么错。谢谢 方向更改后,日志如下。 Initial creation 12-04 11:57:15.808: D/FragmentTest.FragmentTestActivity(3143): onCreate 12-04 11:57:15.945: D/FragmentTest.FragmentOne(3143): OnCreateView 12-04 11:57:16.081: D/FragmentTest.FragmentOne(3143): OnCreateView->SavedInstanceState null Orientation Change 1 12-04 11:57:39.031: D/FragmentTest.FragmentOne(3143): onSaveInstanceState 12-04 11:57:39.031: D/FragmentTest.FragmentTestActivity(3143): onCreate 12-04 11:57:39.031: D/FragmentTest.FragmentOne(3143): OnCreateView 12-04 11:57:39.031: D/FragmentTest.FragmentOne(3143): OnCreateView->SavedInstanceState not null 12-04 11:57:39.031: D/FragmentTest.FragmentOne(3143): OnCreateView 12-04 11:57:39.167: D/FragmentTest.FragmentOne(3143): OnCreateView->SavedInstanceState …

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.