Tag: android fragments

animation片段和后面的堆栈

我无法使用或理解如何popupFragmentTransactions退后堆栈处理自定义animation。 具体来说,我希望它叫“出”animation,但似乎并不如此。 我有一个简单的方法来处理一个片段事务(FragmentTransaction),我添加一个片段,并应用自定义的过渡,以便它淡入/淡出。 我也将这添加到后退堆栈,以便用户可以使用后退button撤消该事务,实质上导航到添加片段之前的状态。 protected void changeFragment() { FragmentTransaction ft = fm.beginTransaction(); ft.setCustomAnimations(android.R.anim.fade_in, android.R.anim.fade_out); ft.add(R.id.fragment_container, new TestFragment()); ft.addToBackStack(null); ft.commit(); } 一切都很顺利,但是当用户点击后退button时,转换animation不会反转。 我期望的是,当片段被删除,它会使用淡出animation。 相反,它似乎popup(没有animation),然后容器似乎淡入。我不知道这正是发生的事情,但片段绝对不是淡出。 我的应用程序使用兼容性库来添加片段支持,但是我认为这也适用于Honeycomb(android-11)。 有谁知道我是否只是在这里做错了什么,或者如果我只是期待太多? 理想的情况下,我想animation的片段类似于(通过Xoom)Gmail如何通过点击一条消息,然后使用后退button向前移动。 最好不必重写后退button的function,并跟上我自己的片段状态,因为我可以有几个“交易”,我想退出,我不是重新发明车轮的粉丝。 另请向Android开发者小组提问: http : //groups.google.com/group/android-developers/browse_thread/thread/1136a3a70fa0b6e9

在片段中显示片段viewpager

我有一个包含ViewPager的片段。 ViewPager与包含一组片段的适配器相关联。 加载父片段后,遇到IllegalStateException ,消息: java.lang.IllegalStateException: Recursive entry to executePendingTransactions 。 一些研究使我得出这样一个结论:系统无法在另一个片段中显示片段,但是似乎有一些迹象表明,使用ViewPager(ViewPager中的一个bug使用它与其他片段 )。 事实上,如果我按下的button添加到我的父代片段,当我的ViewPager按下时调用mPager.setAdapter(mAdapter) ,ViewPager成功加载。 这并不理想。 这个问题必然与片段生命周期有关。 因此,我的问题是:有没有人find解决这个问题的办法,如果是的话,怎么办? 有没有办法延迟ViewPager上的适配器的设置,直到片段事务之后? 这是我的父母片段代码: @Override public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) { mView = inflater.inflate(R.layout.team_card_master, container, false); mViewPager = (ViewPager)mView.findViewById(R.id.team_card_master_view_pager); final Button button = (Button)mView.findViewById(R.id.load_viewpager_button); button.setOnClickListener(new OnClickListener() { @Override public void onClick(View v) { mViewPager.setAdapter(mAdapter); button.setVisibility(View.GONE); } }); […]

无法使自定义的DialogFragment在片段上透明

我需要创build一个片段(占用整个屏幕)的对话框。 对话框需要是一个浮动的对话框,它将被定位在片段之外,并且片段在片段之外变暗。 对于自定义的对话框,我有一个linearLayout有弯曲的边缘,无论我做什么,对话框都有一个黑色边界(非常小)。 我已经尝试了一切,使其透明,并消失(所有的对话框只是线性布局 – 弯曲的框) 对于DialogFragment,这是我的onCreateView @Override public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState){ LinearLayout layout =(LinearLayout)inflater.inflate(R.layout.custom_dialog, null); LinearLayout item = (LinearLayout)layout.findViewById(R.id.display_item); populateItemData(item, inflater); return layout; } custom_dialog只是一个将android:backgroung设置为#000000的LinearLayout 这是我自定义对话框的样式 <style name="CustomDialog" parent="android:style/Theme.Dialog"> <item name="android:windowBackground">@null</item> <item name="android:windowNoTitle">true</item> <item name="android:windowIsFloating">true</item> <item name="android:windowIsTranslucent">true</item> <item name="android:alwaysDrawnWithCache">false</item> <item name="android:windowContentOverlay">@null</item> </style> 我尝试了这种风格的各种组合(从我在网上看到的),我不能摆脱那种恼人的黑色边界,我可以把它绘成白色或任何其他颜色,如果我设置LinearLayout背景以外的任何东西#000000 … 我已经花了3-4个小时,我希望别人可以帮忙…

FragmentTransactionanimation滑过顶部

我正在尝试使用FragmentTransaction.setCustomAnimations实现以下效果。 片段A正在显示 用碎片Breplace碎片A.碎片A应该在replace期间保持可见。 片段B应该从右侧滑入。 片段B应该在片段A的顶部滑动。 我没有问题在animation设置中获取幻灯片。 我的问题是,我无法弄清楚如何使片段A保持原状,并且在animation中的幻灯片正在运行时处于片段B下。 无论我做什么,似乎碎片A是最重要的。 我怎样才能做到这一点? 这是FragmentTransaction代码: FragmentTransaction ft = getSupportFragmentManager().beginTransaction(); ft.setCustomAnimations(R.anim.slide_in_right, R.anim.nothing, R.anim.nothing, R.anim.slide_out_right); ft.replace(R.id.fragment_content, fragment, name); ft.addToBackStack(name); ft.commit(); 正如你所看到的,我已经为“out”animation定义了一个animationR.anim.nothing,因为我实际上不希望片段A做任何事情,除了在事务中保持它的位置。 这里是animation资源: slide_in_right.xml <translate xmlns:android="http://schemas.android.com/apk/res/android" android:duration="@android:integer/config_mediumAnimTime" android:fromXDelta="100%p" android:toXDelta="0" android:zAdjustment="top" /> nothing.xml <alpha xmlns:android="http://schemas.android.com/apk/res/android" android:duration="@android:integer/config_mediumAnimTime" android:fromAlpha="1.0" android:toAlpha="1.0" android:zAdjustment="bottom" />

正确的方法来给碎片初始数据?

所以我知道我需要一个空的构造函数,以便我的碎片不会在重新初始化时崩溃。 我的问题是,我的碎片初始化时(至less其中一些)使用数据列表。 那么用一个数据列表开始新的片段是一个好方法。 我应该在OnCreate()做一个getData方法,从其他来源获取数据或什么是一个合适的方法? 用数据喂食包真的不是一个很好的方法,因为我有很多数据。 所以让我们来看一个案例(我理解这种方式更好)。 当用户点击一个button时,片段被启动。 我以前做的是用这种方式创build一个新的片段: FragmentManager fragmentManager = getSupportFragmentManager(); FragmentTransaction fragmentTransaction = fragmentManager.beginTransaction(); fragmentTransaction.replace(R.id.center_container, new DetailFragment(item)); fragmentTransaction.addToBackStack(DETAIL_TAG); fragmentTransaction.commit(); 然后在我的片段: public DetailFragment(EventItem item) { mItem = item; mPlaces = Database.getContainerPlaces(getActivity()).getValidItems(); } 我不能把所有的数据都提供给一个bundle,所以这是行不通的。 所以我该怎么做? 答:我应该使用空构造函数初始化片段,然后从我的活动中使用setter直接在片段中设置数据? 但是,如果用户按下home,android会closures片段,并且用户稍后返回,那么是不是会丢失数据? B:我应该用工厂模式初始化片段并调用setRetainInstance(true),给片段一个用于标识数据的关键字,然后让片段从第三个源获取onCreateView中所需的数据? C:我应该只是做一个空的构造函数,然后在onCreate()获取片段所需的数据? 应该指出的是,应用程序被locking在肖像,所以这个问题主要是在Androidclosures和用户重新启动时维护对象。

片段的onSaveInstanceState()永远不会被调用

我试图将数据保存在Fragment的onSaveInstanceState()中,但该方法从未被调用过。 有人可以帮忙吗? public class MyFragment extends Fragment { @Override public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) { ScrollView content = (ScrollView) inflater.inflate(R.layout.content, container, false); // More stuff return content; } @Override public void onSaveInstanceState(Bundle icicle) { // NEVER CALLED super.onSaveInstanceState(icicle); //More stuff } }

android:configChanges =“orientation”不能使用片段

我只是想适应HoneyComb的一些应用程序。 我正面临的问题是我的方向改变(景观/肖像)活动的破坏 当我使用经典活动时,我在清单中写道: 但现在,所有这些线路都不再工作了! 有没有解决方法? 我的代码: <activity android:name=".TwitterActivity" android:label="@string/app_name" android:configChanges="keyboardHidden|orientation" /> <activity android:name=".TwitterActivity$AppListFragment" android:configChanges="keyboardHidden|orientation" />

ScrollView布局不填满整个屏幕

我得到了两个Fragment的Activity (一个正常的名单)。 正常的Fragment膨胀一个包含LineaLayout (垂直)的LineaLayout ,这个布局包含TextViews 。 ScrollView和layout_width和layout_height是match_parent ,所以我认为应该使用整个屏幕。 但是底部还是有一个“差距”。 我希望你能帮助我。 ScrollView.xml <ScrollView xmlns:android="http://schemas.android.com/apk/res/android" xmlns:tools="http://schemas.android.com/tools" android:id="@+id/scrollView1" android:layout_width="match_parent" android:layout_height="match_parent"> <LinearLayout android:id="@+id/LinearLayout1" android:layout_width="match_parent" android:layout_height="match_parent" android:background="@color/titlescreen_bg" android:orientation="vertical" android:paddingTop="60dp" tools:context=".MainActivity" > <TextView android:id="@+id/tv_headline" android:layout_width="match_parent" android:layout_height="wrap_content" android:gravity="center" android:paddingBottom="60dp" android:paddingTop="60dp" android:textIsSelectable="false" android:textSize="@dimen/fontsize_slogan_titlescreen" /> <TextView android:id="@+id/tv_content" android:layout_width="match_parent" android:layout_height="match_parent" android:gravity="center" android:paddingBottom="30dp" android:paddingTop="30dp" android:textIsSelectable="false" android:textSize="@dimen/fontsize_slogan_titlescreen" /> </LinearLayout> </ScrollView> 使这个布局膨胀的片段。 package wak.iage.layout; import wak.iage.R; import android.app.Fragment; […]

如何在Android中为Navigation Drawer添加一个分隔符?

我有一个像这个图像的导航抽屉。 我想添加一个部分分隔符(如分隔海王星​​线)。 这似乎很简单,但我无法find任何有用的networking上的事情。 这是我的MainActivity: public class MainActivity extends Activity { private DrawerLayout mDrawerLayout; private ListView mDrawerList; private ActionBarDrawerToggle mDrawerToggle; private CharSequence mDrawerTitle; private CharSequence mTitle; private String[] mPlanetTitles; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); mTitle = mDrawerTitle = getTitle(); mPlanetTitles = getResources().getStringArray(R.array.planets_array); mDrawerLayout = (DrawerLayout) findViewById(R.id.drawer_layout); mDrawerList = (ListView) findViewById(R.id.left_drawer); // set a […]

片段 – 指定的孩子已经有一个父母。 您必须首先调用子对象的父对象的removeView()

我得到这个错误。 我尝试了许多解决scheme,但我coudnt解决这个问题。 帮我! 我需要将表面视图和button添加到使用片段的活动中。 CamActivity.java: public class CamActivity extends FragmentActivity { @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_cam); FragmentManager fm = getSupportFragmentManager(); Fragment fragment = fm.findFragmentById(R.id.fragmentContainer); if(fragment == null) { fragment = new CamFragment(); fm.beginTransaction() .add(R.id.fragmentContainer, fragment) .commit(); } } } CamFragment.java: public class CamFragment extends Fragment { private static final String TAG = […]