说我有一个活动,有碎片添加编程: private void animateToFragment(Fragment newFragment, String tag) { FragmentTransaction ft = getFragmentManager().beginTransaction(); ft.replace(R.id.fragment_container, newFragment, tag); ft.addToBackStack(null); ft.commit(); } 什么是返回到可见的前一个片段的最佳方法? 我发现在Android的button点击触发后退buttonfunction,但我想模拟一个后退键事件是不正确的方式来解决它(我也不能让它工作): dispatchKeyEvent(new KeyEvent(KeyEvent.ACTION_DOWN, KeyEvent.KEYCODE_BACK)); 调用finish()只是closures了我不感兴趣的活动。 有没有更好的方法去做这件事?
我遇到了一个很大的问题,android片段backstack似乎工作的方式,将非常感激的任何帮助提供。 想象一下你有3个碎片 [1] [2] [3] 我希望用户能够导航[1] > [2] > [3]但是在返回的路上(按下后退button) [3] > [1] 。 正如我想象的那样,这可以通过在创build将fragment [2]带入XML中定义的片段持有者的事务时不调用addToBackStack(..)来实现。 这个现实似乎是,如果当用户按下[3]上的button时我不想再次出现,我不能在显示片段[3]的事务中调用addToBackStack 。 这似乎完全违反直觉(也许来自iOS世界)。 无论如何,如果我这样做的话,当我从[1] > [2]出发并按回时,如预期的那样回到[1] 。 如果我走[1] > [2] > [3] ,然后按回,我会跳回到[1] (如预期的那样)。 现在,当我尝试从[1]再次跳到[2]时,会出现奇怪的行为。 首先[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 –> […]
我的其他post略有变化 基本上我有一个消息Handler在我的Fragment ,收到一堆消息,可能会导致对话被解散或显示。 当应用程序被放到后台时,我得到一个onPause但仍然可以让我的消息像预期的那样通过。 但是,因为我正在使用片段,所以不能忽略并显示对话框,因为这会导致IllegalStateException 。 我不能只是解雇或取消允许国家损失。 鉴于我有一个Handler我想知道是否有一个build议的方法,我应该如何处理处于暂停状态的消息。 我正在考虑的一种可能的解决scheme是logging暂停时发送的消息,并在onResume上播放。 这有点令人不满意,我想在框架中必须有一些东西来处理这个更优雅。 提前致谢。 彼得。
我需要关于片段内碎片的帮助,实际上我在按下button时遇到问题。 应用程序主屏幕上有button,按下每个button视图replace为新的片段(该片段包含在另一个片段内),dynamic添加/replace片段工作正常,按下button1片段replace,同样按下button时,但如果我按button再次,得到一个exception: "Duplicate id 0x7f05000a, tag null, or parent id 0x7f050009 with another fragment for com…….. fragmentname" 意思是已经添加了片段或内部片段,我试图再次添加它们,任何人都知道如何使用片段内部的片段并且没有任何问题来回移动,感谢支持。 MainActivity,其中片段是dynamic添加和replace的。 public class FragmentInsideFragmentTestActivity extends Activity { private Button button1; private Button button2; private Button button3; private Button button4; /** Called when the activity is first created. */ @Override public void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.main); button1 […]
我正在尝试从一组片段中将选项添加到选项菜单中。 我创build了一个新的MenuFragment类,并将其扩展为我希望包含菜单项的片段。下面是代码: public class MenuFragment extends Fragment { MenuItem fav; @Override public void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setHasOptionsMenu(true); } public void onCreateOptionsMenu(Menu menu, MenuInflater inflater) { fav = menu.add("add"); fav.setIcon(R.drawable.btn_star_big_off); } } 出于某种原因, onCreateOptionsMenu似乎不运行。
我search整天,我找不到答案… 一切准备就绪,但谷歌地图仍然不能显示在选项卡上的片段 我检查我已经打开谷歌地图android v2和正确的API_KEY 我不知道发生了什么事! MainActivity.java: public class MainActivity extends FragmentActivity implements ActionBar.TabListener { SectionsPagerAdapter mSectionsPagerAdapter; ViewPager mViewPager; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); String titles[] = { this.getString(R.string.title_around), this.getString(R.string.title_map), this.getString(R.string.title_favorite), this.getString(R.string.title_achievement), }; final ActionBar actionBar = getActionBar(); actionBar.setNavigationMode(ActionBar.NAVIGATION_MODE_TABS); mSectionsPagerAdapter = new SectionsPagerAdapter( getSupportFragmentManager()); mViewPager = (ViewPager) findViewById(R.id.pager); mViewPager.setAdapter(mSectionsPagerAdapter); mViewPager .setOnPageChangeListener(new ViewPager.SimpleOnPageChangeListener() { […]
我正在使用我的应用程序的支持库。 在我的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 protected […]
问题:如何从DialogFragment创build一个callback到另一个Fragment。 在我的情况下,涉及的Activity应该完全不知道DialogFragment。 考虑我有 public class MyFragment extends Fragment implements OnClickListener 然后在某个时候我可以做 DialogFragment dialogFrag = MyDialogFragment.newInstance(this); dialogFrag.show(getFragmentManager, null); MyDialogFragment的外观 protected OnClickListener listener; public static DialogFragment newInstance(OnClickListener listener) { DialogFragment fragment = new DialogFragment(); fragment.listener = listener; return fragment; } 但是,如果DialogFragment在其生命周期中暂停并恢复,则不能保证侦听器将在其周围。 碎片中的唯一保证是通过setArguments和getArguments通过Bundle传入的。 有一种方法可以引用活动,如果它应该是监听者: public Dialog onCreateDialog(Bundle bundle) { OnClickListener listener = (OnClickListener) getActivity(); …. return new AlertDialog.Builder(getActivity()) […]
我发现Fragment#setRetainInstance(true)令人困惑。 这里是从Android开发者API提取的Javadoc: public void setRetainInstance (boolean retain) 控制是否在重新创buildActivity(例如从configuration更改)中保留片段实例。 这只能用于不在后面堆栈中的碎片。 如果设置,则在重新创build活动时,片段生命周期将略有不同: onDestroy()将不会被调用(但onDetach()仍然会,因为片段正在从它当前的活动分离)。 onCreate(Bundle)将不会被调用,因为片段不被重新创build。 onAttach(Activity)和onActivityCreated(Bundle)仍然会被调用。 问题:作为一名开发人员,你如何使用它,为什么它使事情变得更简单?
片段中onCreate() , onCreateView()和onActivityCreated()之间有什么区别,它们各自用于什么?