Articles of android fragments

在Backstack中不是最顶层的片段将恢复

鉴于应用程序流程在图形和文本中描述如下所示。 片段1是最低片段,但不是通过设置disallowAddToBackStack在backstack中。 使用fragmentTransaction.addToBackStack()将片段2推入堆栈。 片段1的新实例被推入堆栈。 最顶层的片段(片段1)从堆栈中popup。 活动2成为前景。 活动1成为前景。 这是我用来处理片段的通用方法: private void changeContainerViewTo(int containerViewId, Fragment fragment, Activity activity, String backStackTag) { if (fragmentIsAlreadyPresent(containerViewId, fragment, activity)) { return; } final FragmentTransaction fragmentTransaction = activity.getFragmentManager().beginTransaction(); fragmentTransaction.replace(containerViewId, fragment); fragmentTransaction.setTransition(FragmentTransaction.TRANSIT_FRAGMENT_OPEN); if (backStackTag == null) { fragmentTransaction.disallowAddToBackStack(); } else { fragmentTransaction.addToBackStack(backStackTag); } fragmentTransaction.commit(); } 问题 当活动1在最后一步中恢复时,片段1的最低实例也将恢复。 此时,片段1在getActivity()上返回null 。 题 为什么堆栈中不是最重要的片段会重新开始? 如果恢复片段是正确的 – […]

在fragmentTab之间切换会产生意外结果

我试图在http://developer.android.com/resources/samples/Support4Demos/src/com/example/android/supportv4/app/FragmentTabs.html中实现FragmentTabs。 一切顺利,直到我这样做: 我从一个标签开始了许多不同的片段,如: TAB1 – >片段1 —> fragment2 —> fragment3 TAB2 但是当我切换到tab2并再次回到tab1时,我得到的是fragment1屏幕而不是fragment3(即我在第一个标签中有3个片段,而我在第3个片段上,在切换到第二个标签后我再来到第一个标签,我是被带到第一个片段而不是第三个)..任何人都可以告诉可能是什么概率? @Override public void onTabChanged(String tabId) { TabInfo newTab = mTabs.get(tabId); if (mLastTab != newTab) { FragmentTransaction ft = mActivity.getSupportFragmentManager().beginTransaction(); if (mLastTab != null) { if (mLastTab.fragment != null) { ft.detach(mLastTab.fragment); } } if (newTab != null) { if (newTab.fragment == null) { newTab.fragment […]

如何在与当前片段相同的空间中加载新片段

我正在寻找一些关于处理启动其他片段的片段的最佳方法的建议。 我正在转换一个应用程序,我开始使用更多基于活动的方法开始编写,然后开始将其转移到使用Fragments。 我有一些片段用于启动一个新的活动,我想将它们移动到在当前片段所在的同一视图中启动其他片段。 例如 – 我有一个Activity,它有一个WebView,它使用WebViewClient来处理内部的js-> java交互。 我的WebViewClient可以启动其他活动,我曾经这样做过: i = new Intent(context, GoogleMapActivity.class); startActivity(i); 这个webview活动既可以是全屏也可以是侧视菜单的视图,但是我希望webview能够尊重布局 – 所以如果菜单存在,它应该在启动新片段时保持存在 – 我只是不知道编写启动Fragments的代码的最佳方法。 那么……在Fragment中是否有一种方法可以基本上告诉新的Fragment加载到与当前片段相同的空间中,或者是否需要与Activity进行一些交互? **编辑** 鉴于可以使用一些不同的布局,我并不总是知道我应该将哪个ID放入片段中 – 因此我需要知道是否有办法在不知道id的情况下执行此操作(如replace方法例如)。

带有DialogFragment的上下文操作栏

我一直在尝试实现一个上下文操作栏以及一个对话框片段。 类似于android中的下载小部件。 我试图在主题中将android:windowActionModeOverlay设置为true。 但它似乎没有用。 有什么办法可以实现吗?

ViewPager + Fragments – 片段未显示

我试图使用viewpager来显示几个片段。 目前我只有一个片段,但它似乎永远不会被实例化。 我尝试使用pager.setCurrentItem(0),但永远不会调用适配器中的getItem方法。 有没有人在下面的代码中看到为什么我的片段没有加载? 主要活动 public class MainActivity extends SherlockFragmentActivity { MyPagerAdapter adapter; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate( savedInstanceState ); setContentView( R.layout.activity_main ); // Create the FragmentPager Adapter and assign it to the viewpager adapter = new MyPagerAdapter( getSupportFragmentManager(), this ); ViewPager pager = ( ViewPager ) findViewById( R.id.pager ); pager.setAdapter( adapter ); […]

方向更改时强制关闭并打开日期对话框

我有一个活动,我想要的只是 活动 – >点击一些布局(有文本视图) – >打开Datepicker – >在txtvalue中设置选定的值 我想使用DialogFragment和下面的代码来使用Datepicker。 package com.app.ourforms.date; import java.util.Calendar; import android.app.DatePickerDialog; import android.app.Dialog; import android.app.DialogFragment; import android.os.Bundle; import android.util.Log; import android.widget.DatePicker; import android.widget.TextView; public class DatePickerFragment extends DialogFragment implements DatePickerDialog.OnDateSetListener { TextView txt; public DatePickerFragment() { } public DatePickerFragment(TextView txt) { this.txt = txt; } @Override public Dialog onCreateDialog(Bundle savedInstanceSateate) { […]

如何使用Android中的intent将活动之间的数据传递给片段

我现在可以将值存储在一个variables中,我希望将该variables传递给片段。 使用以下代码,我可以加载片段。 public class AndroidListFragmentActivity extends Activity { Fragment2 f2; public static String itemname; /** Called when the activity is first created. */ @Override public void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.apetiserfragement); itemname=getIntent().getStringExtra(“itemname”); Bundle args=new Bundle(); args.putString(“itemname”, itemname); f2=new Fragment2(); f2.setArguments(args); } } (这里我使用XML页面加载片段)itemname 输出分为2个窗口,一个用于扩展listfragment(用于listview)。 一个用于碎片 Fragment2.xml public class Fragment2 extends Fragment { String itemname; @Override […]

当布局不为空时,得到“java.lang.IllegalStateException:片段已经激活”

我有3个片段的活动和寻呼机。 我使用标签进行切换。 当我点击某个按钮时,我想用新的替换fragment0。 它仅在fragment0具有空布局时有效。 如果我在fragment0的布局中设置一些内容(必须有listview)抛出exception: java.lang.IllegalStateException: Fragment already active at android.support.v4.app.Fragment.setInitialSavedState(Fragment.java:503) at android.support.v4.app.FragmentStatePagerAdapter.instantiateItem(FragmentStatePagerAdapter.java:110) at android.support.v4.view.ViewPager.addNewItem(ViewPager.java:649) 我使用以下布局: 活动: public class Activity extends FragmentActivity { private List fragments; private MyPagerAdapter pagerAdapter; @Override protected void onCreate(Bundle savedInstanceState) { fragments = asList(new Fragment0(), new Fragment1(), new Fragment2()); // initialize pager, etc. pagerAdapter = new MyPagerAdapter(getSupportFragmentManager(), pager); } // handle […]

如何在Fragment 中将选定的Dialog值设置为TextViews

我正在使用Fragments编写一个Android应用程序,在我的一个片段中,我正在使用两个选择器(日期和时间) 。 我用谷歌搜索并find解决方案,通过使用点击按钮显示片段中的Dialogs ,我也这样做, 每当用户点击相应的按钮时显示对话框 。 但我没有得到如何将对话框值设置为各自的TextView 。 看我下面的代码,我用来通过点击按钮显示对话框, DatePickerDialogFragment.java: public class DatePickerDialogFragment extends DialogFragment { private DatePickerDialog.OnDateSetListener mDateSetListener; public DatePickerDialogFragment() { } DatePickerDialogFragment(OnDateSetListener dateSetListener) { mDateSetListener = dateSetListener; } @Override public Dialog onCreateDialog(Bundle savedInstanceState) { // Use the current date as the default date in the picker final Calendar c = Calendar.getInstance(); int year […]

活动的每个片段中的浮动操作按钮的不同实现

这是关于协调活动中浮动操作按钮的行为的问题,其中包含5个片段。 在我的应用程序中,我有一个Activity,其中包含一个ViewPager和一个用FloatingActionButton定义的xml。 ViewPager包含Fragments,在每个Fragment中都有一个RecyclerView.On点击浮动操作按钮我实现了scrollToPosition(0)。 由于我在main活动的xml文件中实现了Floating ActionButton,因此scrollToPosition()仅在单击浮动操作按钮的最后一个片段中起作用。我如何克服这一点,以便在任何片段中点击浮动按钮时,回收器视图滚动到顶部? 我已经尝试在片段布局文件中实现floatingactionbutton并且它完全正常。但是这个问题是当我从一个片段滑动到另一个片段时,浮动动作按钮将会移动。所以有任何方式可以让我在其中实现浮动按钮主活动xml文件,并且仍然能够在点击FloatingActionButton的每个片段中实现scrollToPosotion(0)? 非常感谢任何建议。 以下是包含浮动操作按钮的xml文件。 以下是片段的xml文件 以下是每个片段中浮动操作按钮的实现 fab = (android.support.design.widget.FloatingActionButton) view.findViewById(R.id.fab); fab.setOnClickListener(new View.OnClickListener() { @Override public void onClick(View v) { LinearLayoutManager llm = (LinearLayoutManager) mRecyclerView.getLayoutManager(); llm.scrollToPositionWithOffset(0, 0); } });