在Android API 11+中,Google发布了一个名为的新类Fragment
.
在视频中,谷歌建议尽可能(link1,link2),我们应该使用片段而不是活动,但他们没有解释确切原因.
片段的目的是什么?它们的一些可能的用途(除了一些可以通过简单的视图/布局轻松实现的UI示例)?
我的问题是片段:
奖金问题:
android android-layout android-fragments android-3.0-honeycomb android-activity
如何更改ActionBar的文本颜色?我继承了Holo Light主题,我能够改变ActionBar的背景,但是我没有找到调整文本颜色的属性是什么.
好的,我可以使用android:textColorPrimary属性更改文本颜色,但它也会更改ActionBar按钮上发生溢出时显示的下拉菜单的文本颜色.知道如何更改那些下拉菜单/列表的颜色吗?
android android-3.0-honeycomb android-actionbar android-text-color
我试图动画片段之间的过渡.我从以下Android片段和动画中得到了答案
FragmentTransaction ft = getFragmentManager().beginTransaction();
ft.setCustomAnimations(R.anim.slide_in_left, R.anim.slide_out_right);
DetailsFragment newFragment = DetailsFragment.newInstance();
ft.replace(R.id.details_fragment_container, newFragment, "detailFragment");
// Start the animated transition.
ft.commit();
Run Code Online (Sandbox Code Playgroud)
还有我的R.anim.slide_in_left
<?xml version="1.0" encoding="utf-8"?>
<set xmlns:android="http://schemas.android.com/apk/res/android">
<translate android:fromXDelta="50%p" android:toXDelta="0"
android:duration="@android:integer/config_mediumAnimTime"/>
<alpha android:fromAlpha="0.0" android:toAlpha="1.0"
android:duration="@android:integer/config_mediumAnimTime" />
</set>
Run Code Online (Sandbox Code Playgroud)
但当我尝试这个时,它表明了
02-08 16:27:37.961: ERROR/AndroidRuntime(1717): FATAL EXCEPTION: main
02-08 16:27:37.961: ERROR/AndroidRuntime(1717): java.lang.RuntimeException: Unknown animator name: translate
02-08 16:27:37.961: ERROR/AndroidRuntime(1717): at android.animation.AnimatorInflater.createAnimatorFromXml(AnimatorInflater.java:129)
02-08 16:27:37.961: ERROR/AndroidRuntime(1717): at android.animation.AnimatorInflater.createAnimatorFromXml(AnimatorInflater.java:126)
02-08 16:27:37.961: ERROR/AndroidRuntime(1717): at android.animation.AnimatorInflater.createAnimatorFromXml(AnimatorInflater.java:93)
02-08 16:27:37.961: ERROR/AndroidRuntime(1717): at android.animation.AnimatorInflater.loadAnimator(AnimatorInflater.java:72)
02-08 16:27:37.961: ERROR/AndroidRuntime(1717): at android.app.FragmentManagerImpl.loadAnimator(FragmentManager.java:621)
02-08 16:27:37.961: …
Run Code Online (Sandbox Code Playgroud) 你应该如何实现那种例如Honeycomb Gmail客户端使用的滑动?
可以TransactionManager
通过添加和删除片段自动处理这个,由于模拟器是幻灯片,所以很难测试这个:)
我需要在我的蜂窝应用程序中实现启动画面.我在activity的onCreate中使用此代码来显示splash:
setContentView(R.layout.splash);
getActionBar().hide();
Run Code Online (Sandbox Code Playgroud)
并且此代码在某段时间后显示主UI:
setContentView(R.layout.main);
getActionBar().show();
Run Code Online (Sandbox Code Playgroud)
但是在调用onCreate并且出现splash 之前,显示操作栏时会有少量时间.
如何让动作栏隐形?
我尝试将主题应用于没有操作栏的活动:
<item name="android:windowActionBar">false</item>
Run Code Online (Sandbox Code Playgroud)
但在这种情况下getActionBar()总是返回null,我发现无法再显示它.
我想将一个片段添加到以编程方式实现其布局的Activity.我查看了Fragment文档,但没有很多示例描述我需要的内容.这是我尝试编写的代码类型:
public class DebugExampleTwo extends Activity {
private ExampleTwoFragment mFragment;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
FrameLayout frame = new FrameLayout(this);
if (savedInstanceState == null) {
mFragment = new ExampleTwoFragment();
FragmentTransaction ft = getFragmentManager().beginTransaction();
ft.add(frame.getId(), mFragment).commit();
}
setContentView(frame);
}
}
Run Code Online (Sandbox Code Playgroud)
...
public class ExampleTwoFragment extends Fragment {
@Override
public View onCreateView(LayoutInflater inflater,
ViewGroup container,
Bundle savedInstanceState) {
Button button = new Button(getActivity());
button.setText("Hello There");
return button;
}
}
Run Code Online (Sandbox Code Playgroud)
此代码编译但在开始时崩溃,可能是因为我FragmentTransaction.add()
的错误.这样做的正确方法是什么?
我有一个奇怪的问题.我正在使用targetsdk 13制作应用程序.
在我的主要活动的onCreate方法中,我打电话getActionBar()
来设置我的操作栏.这在Android 3.2模拟器上运行时工作正常,但在使用Android 3.0和3.1时,该getActionBar()
方法返回null.
我发现这非常奇怪,我看不出有什么理由会这样做.这是模拟器的错误还是我需要做的事情,以确保我的应用程序有一个操作栏?
解决方案:
我想我找到了解决这个问题的方法.我没有使用setContentView来设置活动的布局.相反,我正在使用fragmentTransaction.add(android.R.id.content, mFragment, mTag)
向活动添加片段.这在3.2中运行良好,但在早期的蜂窝版本中,如果您不在方法中使用setContentView,则操作栏显然未设置onCreate()
.所以我通过setContentView()
在我的方法中使用方法修复它,onCreate()
并为它提供包含空FrameLayout的布局.我仍然可以fragmentTransaction.add(android.R.id.content, mFragment, mTag)
像以前一样使用该方法.
这不是最漂亮的修复,但它确实有效.
我正在寻找可以应用于3.0和3.0之前的设备的首选项.发现PreferenceActivity
包含已弃用的方法(虽然这些方法在随附的示例代码中使用),我查看PreferenceFragement
了兼容性包以解决我的困境.
但是,它似乎PreferenceFragment
不在兼容包中.谁能告诉我这是否是故意的?如果是这样,我可以轻松定位一系列设备(即<3.0和> = 3.0)还是我必须跳过篮球?如果没有故意排除,我们是否可以期待兼容包的新版本?或者是否有另一种可以安全使用的解决方法?
干杯
詹姆士
我没有setTag(String tagName)
在Fragment
课堂上找到类似方法的东西.设置Fragment
我找到的标记的唯一方法是执行a FragmentTransaction
并将标记名称作为参数传递.
这是Fragment
通过代码显式设置标记的唯一方法吗?
我有一个listview的活动.当用户单击该项目时,项目"viewer"将打开:
List1.setOnItemClickListener(new OnItemClickListener() {
@Override
public void onItemClick(AdapterView<?> arg0, View arg1, int arg2,long arg3) {
Intent nextScreen = new Intent(context,ServicesViewActivity.class);
String[] Service = (String[])List1.getItemAtPosition(arg2);
//Sending data to another Activity
nextScreen.putExtra("data", datainfo);
startActivityForResult(nextScreen,0);
overridePendingTransition(R.anim.right_enter, R.anim.left_exit);
}
});
Run Code Online (Sandbox Code Playgroud)
这样可以正常工作,但在操作栏上,应用程序图标旁边的后退箭头不会被激活.我错过了什么吗?