我有与NavigationDrawer ActionBarActivity和使用support_v7 Toolbar作为ActionBar。 在我的一个片段工具栏中有自定义视图。 在其他片段Toolbar应显示标题。 如何让Toolbar实例从碎片定制? 我可以通过getActivity().getActionBar()获得ActionBar,但是如果我为这个实例的ActionBar调用setTitle() ,它什么也不做。 UPD: 在我的情况 ((ActionBarActivity) getActivity()).getSupportActionBar().setTitle(); (正如MrEngineer13所说)在第一个片段创build时不工作,因为我从onHiddenChanged()调用它。 现在我添加更多的onCreateView(),它工作正常。
随着新的devise库,有几个新的布局,改变了很多,如果开发商愿意,工具栏的行为。 由于不同的片段具有不同的行为和目标,例如具有折叠工具栏的画廊片段显示重要的照片,或者没有滚动视图的片段不需要用于隐藏工具栏的appbarlayout,在活动中具有单个工具栏certificate困难。 所以,这个,我应该把工具栏移动到每个片段? 如果是这样的话,我必须在每次显示一个片段时设置supportActionBar,并且还要引用片段中的活动,从而使片段的独立性无效。 如果我单独将工具栏留在活动中,则必须为每个片段中的每种types的行为定义多个布局。 什么是最好的方法?
这里是场景:活动包含片段A ,它依次使用getChildFragmentManager()在其onCreate添加片段A1和A2 ,如下所示: getChildFragmentManager() .beginTransaction() .replace(R.id.fragmentOneHolder, new FragmentA1()) .replace(R.id.fragmentTwoHolder, new FragmentA2()) .commit() 到目前为止,这么好,一切都按预期运行。 然后,我们在Activity中运行以下事务: getSupportFragmentManager() .beginTransaction() .setCustomAnimations(anim1, anim2, anim1, anim2) .replace(R.id.fragmentHolder, new FragmentB()) .addToBackStack(null) .commit() 在转换过程中,片段B的enteranimation正确运行,但片段A1和A2完全消失 。 当我们用Backbutton恢复事务时,它们在popEnteranimation期间正确初始化并正常显示。 在我的简短testing中,它得到了更多的 – 如果我设置了子片段的animation(见下文),当我们添加片段B时, exitanimation间歇运行 getChildFragmentManager() .beginTransaction() .setCustomAnimations(enter, exit) .replace(R.id.fragmentOneHolder, new FragmentA1()) .replace(R.id.fragmentTwoHolder, new FragmentA2()) .commit() 我想实现的效果很简单 – 我想要片段A (anim2)上的exit (或者应该是popExit ?)animation来运行整个容器,包括其嵌套的子项。 有什么办法可以实现吗? 编辑 :请在这里find一个testing用例 编辑2 :感谢@StevenByle推动我继续尝试与静态animation。 显然你可以在每个操作的基础上设置animation(对整个事务不是全局的),这意味着孩子可以有一个无限的静态animation集,而他们的父母可以有不同的animation,整个事情可以在一个事务中提交。 […]
我有一个应用程序,得到一个活动与水平放置2个片段。 在我的活动中,我使用onCreateOptionsMEnu()来充气菜单,使用它我可以显示操作栏选项菜单。 但是,当我尝试更新我的片段之一的操作栏菜单项时,onCreateoptionsmenu()不被调用。所以,我无法更新操作栏选项菜单。 任何人都可以帮助我解决这个问题。 我的活动中的代码如下所示: myActivity.java =============== package com.andr.androidtablelist; import java.io.IOException; import android.app.ActionBar; import android.app.Activity; import android.os.Bundle; import android.view.Menu; import android.view.MenuInflater; import android.view.MenuItem; import android.widget.Toast; import com.andr.fragments.ListLeftFragment; import com.andr.utils.DBHelper; public class TabletActivity extends Activity { ActionBar actionBar = null; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); DBHelper dbhelper; dbhelper = new DBHelper(this); try { dbhelper.createDatabase(); […]
编辑:这个问题是不赞成sherlock行动栏。 现在应该使用Android支持库 我添加了一个名为share的操作栏菜单选项,可以显示我的fragment ,但select事件不会被捕获 我像这样添加它 @Override public void onCreateOptionsMenu (Menu menu, MenuInflater inflater) { MenuItem item = menu.add(0, 7,0, R.string.share); item.setIcon(R.drawable.social_share).setShowAsAction(MenuItem.SHOW_AS_ACTION_IF_ROOM); } 试图在fragment和fragment activity捕获它 @Override public boolean onOptionsItemSelected(MenuItem item) { switch (item.getItemId()) { case 7: Intent share = new Intent(Intent.ACTION_SEND); share.setType("text/plain"); share.putExtra(Intent.EXTRA_TEXT, "I'm being sent!!"); startActivity(Intent.createChooser(share, "Share Text")); return true; default: return super.onOptionsItemSelected(item); } } […]
我目前正在做一个Android应用程序,我想在活动和片段之间传递一个date。 我的活动有一个button,打开片段:DatePickerFragment。 在我的活动中,我显示了一个date,我想用这个片段修改。 所以我想把date传递给datepicker,然后把它发回给activity。 我已经尝试了很多解决scheme,但都没有工作。 简单的方法是通过一个论点,但这不能用碎片来完成。
我开始一个使用AppCompat/ActionBarCompat v7支持库的新项目。 我想弄清楚如何使用片段内的getSupportActionBar 。 我的活动,承载片段扩展ActionBarActivity ,但我没有看到类似的支持类的碎片。 从我的片段中 public class CrimeFragment extends Fragment { //… getActivity().getSupportActionBar().setSubtitle(R.string.subtitle); // getSupportActionBar is not defined in the v4 version of Fragment //… } 谷歌页面使用它( http://android-developers.blogspot.in/2013/08/actionbarcompat-and-io-2013-app-source.html )说,应该没有变化的v4片段。 我是否需要将所有的getActivity()调用转换为ActionBarActivity ? 这似乎是糟糕的devise。
我开始尝试使用刚刚在3月3日发布的Android兼容包,将碎片添加到基于2.1的Android应用中。 我将库包括到了我的项目中,并开始将代码从基于Activity的类移动到基于Fragment的类,但是我注意到Google的Fragment示例似乎依赖于事件3.0(Honeycomb)有新的方法getFragmentManager()。 这似乎是整个Fragment系统的一个整体。 我已经尝试在兼容性包库中寻找包含getFragmentManager()的一些包含的Activity实现,但是我找不到它。 有谁知道我在哪里可以findgetFragmentManager(),所以我可以包括碎片的蜂窝兼容性,或者如果不知道如何可以包括碎片而不使用FragmentManager?
我有一个有2个片段的活动。 两者都是ListFragments,并且都向菜单贡献MenuItems。 我有一个MenuItem,我已经设置属性android:showAsAction让它显示为一个button上的ActionBar。 哪个工作正常。 现在MenuItem是状态相关的。 这是暂停/恢复菜单选项,用于暂停和恢复队列。 我的问题是我无法弄清楚如何设置它的初始雕像创build碎片时。 它的状态取决于队列是否暂停。 所以我有一个AsyncTask获取队列,并根据队列的状态设置布尔(暂停)。 我打电话onPrepareOptionsMenu基于队列的最后一个已知的状态设置暂停菜单项的文本,如果我在实际的菜单中离开MenuItem这很好。 点击菜单图标,onPrepareOptionsMenu被触发,菜单在显示之前被更新。 问题是,如果我把相同的MenuItem的ActionBar(showAsAction),我怎么能强制更新,而无需调用onPrepareOptionsMenu? 我需要能够做到这一点,因为在第一次启动的应用程序,我发送一个请求来获取队列,但任务返回后,设置和显示ActionBar。 我在我的片段中创build了一个处理程序,每次获取队列更新时都会调用该处理程序,但是从那里,如何更新ActionBar上的MenuItem的文本? 我似乎无法find一种方法来获取当前设置的菜单来操纵它,除了在onPrepareOptionMenu。 罗布·W
我有2个片段:(1)Frag1(2)Frag2。 Frag1 bundl = new Bundle(); bundl.putStringArrayList("elist", eList); Frag2 dv = new Frag2(); dv.setArguments(bundl); FragmentTransaction ft = getFragmentManager().beginTransaction(); ft.replace(R.id.the_fragg,dv); ft.show(getFragmentManager().findFragmentById(R.id.the_fragg)); ft.addToBackStack(null); ft.commit(); 如何在Frag2中获取这些数据?