我正在学习如何使用片段.我有三个实例Fragment在类的顶部初始化.我将片段添加到这样的活动:
声明和初始化:
Fragment A = new AFragment();
Fragment B = new BFragment();
Fragment C = new CFragment();
Run Code Online (Sandbox Code Playgroud)
更换/添加:
FragmentTransaction ft = getSupportFragmentManager().beginTransaction();
ft.replace(R.id.content_frame, A);
ft.addToBackStack(null);
ft.commit();
Run Code Online (Sandbox Code Playgroud)
这些片段工作正常.每个片段都附加到活动,并保存到后台堆栈没有任何问题.
所以当我启动A时C,然后B,堆栈看起来像这样:
| |
|B|
|C|
|A|
___
Run Code Online (Sandbox Code Playgroud)
当我按下"后退"按钮时,会B被摧毁并C恢复.
但是,当我A第二次启动片段时,它不会从后端堆栈中恢复,而是添加到后端堆栈的顶部
| |
|A|
|C|
|A|
___
Run Code Online (Sandbox Code Playgroud)
但我想恢复A并销毁它上面的所有碎片(如果有的话).实际上,我只是喜欢默认的后台堆栈行为.
我该如何做到这一点?
预期:( A应该恢复,顶部碎片应该销毁)
| |
| |
| |
|A|
___
Run Code Online (Sandbox Code Playgroud)
编辑:(由A - C建议)
这是我尝试的代码:
private void selectItem(int position) { …Run Code Online (Sandbox Code Playgroud) 我正在尝试从现有文件路径创建一个Bitmap或Drawable.
String path = intent.getStringExtra("FilePath");
BitmapFactory.Options option = new BitmapFactory.Options();
option.inPreferredConfig = Bitmap.Config.ARGB_8888;
mImg.setImageBitmap(BitmapFactory.decodeFile(path));
// mImg.setImageBitmap(BitmapFactory.decodeFile(path, option));
// mImg.setImageDrawable(Drawable.createFromPath(path));
mImg.setVisibility(View.VISIBLE);
mText.setText(path);
Run Code Online (Sandbox Code Playgroud)
但是setImageBitmap(),setImageDrawable()没有显示路径中的图像.我打印了路径,mText它看起来像:/storage/sdcard0/DCIM/100LGDSC/CAM00001.jpg
我究竟做错了什么?有人可以帮帮我吗?
我有一个ArrayList自定义的简单Serializable对象,我想缓存到磁盘并重新启动时读取.我的数据很小,大约有25个对象,最多有5个列表,所以我认为SQLite会有点过分.在我将使用的iPhone世界中NSKeyedArchiver,NSKeyedUnarchiver哪个效果很好.在Android上,我试图用a FileOutputStream和for来做这个,ObjectOutputStream虽然结果是相同的,但性能很糟糕.是否有更好的(更快阅读)方式将小对象缓存到Android中的文件系统?
我已经阅读了android Navigation Drawer的文档但是没有关于如何在导航抽屉中创建可折叠/可扩展List项的信息.我对android有所了解,ExpandableListView但我认为这不是创建它的方法.我想创建这样的嵌套项:

您好我在textview中设置了一些文本.
TextView tweet = (TextView) vi.findViewById(R.id.text);
tweet.setText(Html.fromHtml(sb.toString()));
Run Code Online (Sandbox Code Playgroud)
然后我需要将文本转换TextView为Spannble.所以我这样做:
Spannable s = (Spannable) tweet.getText();
Run Code Online (Sandbox Code Playgroud)
我需要转换它,Spannable因为我传入了TextView一个函数:
private void stripUnderlines(TextView textView) {
Spannable s = (Spannable) textView.getText();
URLSpan[] spans = s.getSpans(0, s.length(), URLSpan.class);
for (URLSpan span : spans) {
int start = s.getSpanStart(span);
int end = s.getSpanEnd(span);
s.removeSpan(span);
span = new URLSpanNoUnderline(span.getURL());
s.setSpan(span, start, end, 0);
}
textView.setText(s);
}
private class URLSpanNoUnderline extends URLSpan {
public URLSpanNoUnderline(String url) {
super(url);
}
@Override
public void updateDrawState(TextPaint …Run Code Online (Sandbox Code Playgroud) 我正在使用几个fragments来动态添加activity.一切正常,当我按下后退按钮时,fragments会去backstack.当resume它出现时,它会出现.但每次都在Resume,它正在重新创造fragment和呼唤onCreateView.我知道这是fragment生命周期的正常行为.
这是我的onCreateView:
@Override
public View onCreateView(LayoutInflater inflater, ViewGroup container,
Bundle savedInstanceState) {
View rootView = inflater.inflate(
R.layout.competitive_programming_exercise, container, false);
return rootView;
}
Run Code Online (Sandbox Code Playgroud)
我想阻止那些fragment重新创作.我尝试过,onSavedInstanstate但没有任何工作.我怎么能做到这一点?
我可以fragment通过回调轻松地在两个活动之间进行通信interface.按照这种方式,我已经实现了一个接口来ParentFragment进行通信.
但是在活动的情况下,我正在使用 -
@Override
public void onAttach(Activity activity) {
super.onAttach(activity);
try {
mCallback = (OnHeadlineSelectedListener) activity;
} catch (ClassCastException e) {
throw new ClassCastException(activity.toString()
+ " must implement OnHeadlineSelectedListener");
}
}
Run Code Online (Sandbox Code Playgroud)
在目前的情况下,我使用mCallback = (OnHeadlineSelectedListener) getParentFragment();而不是mCallback = (OnHeadlineSelectedListener) activity;.一切都运作良好.这种方法可以吗?或者我应该把它改成另一个线程onAttach()呢?
您好我已经创建了一个带有ListView导航的导航抽屉使用ActionBar Sherlock和android support Library v4旧版本兼容性(我的应用程序的minSdkversion ="8"),其中我在ListView中使用了textview的一些属性:
<TextView xmlns:android="http://schemas.android.com/apk/res/android"
android:id="@android:id/title"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:textAppearance="?android:attr/textAppearanceListItemSmall"
android:gravity="center_vertical"
android:paddingLeft="16dp"
android:paddingRight="5dp"
android:textColor="#fff"
android:background="?android:attr/activatedBackgroundIndicator"
android:minHeight="?android:attr/listPreferredItemHeightSmall"/>
Run Code Online (Sandbox Code Playgroud)
这被示出误差?android:attr/activatedBackgroundIndicator是从API 11和?android:attr/textAppearanceListItemSmall&?android:attr/listPreferredItemHeightSmall是从API 14.
我设法?android:attr/activatedBackgroundIndicator通过用actionBar Sherlock替换它来支持?attr/activatedBackgroundIndicator.但我没有发现其他两个属性的任何等价.有?attr/textAppearanceListItemSmall在动作条福尔摩斯,但它不能正常工作.
那么这些属性的等价性为2.1以上的所有API提供支持?
您好我正在使用ActionBarSherlock和Navigation Drawer开发一个应用程序.我用actionBar Sherlock创建了一个初始导航抽屉,如下所示:

一切似乎都没问题但我想用我的自定义颜色更改突出显示的列表项的默认蓝色.我试过这个链接,但它没有用.我需要做些什么来实现自定义高亮颜色?
我有一个将填充的列表视图,AsyncTask在应用程序的底部边缘,我需要显示一个固定的叠加布局,如下所示:

但我无法弄明白我如何在xml中做到这一点?这是我目前的layout.xml:
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:orientation="vertical">
<ListView
android:id="@+id/list"
android:layout_width="match_parent"
android:layout_height="wrap_content" />
<!-- Probably I need to do something here -->
</LinearLayout>
Run Code Online (Sandbox Code Playgroud)