我使用Android 支持包中的ViewPager来解决此错误.从使用ViewPager教程的水平视图滑动
06-19 13:07:25.950: E/AndroidRuntime(16382): FATAL EXCEPTION: main
06-19 13:07:25.950: E/AndroidRuntime(16382): java.lang.NullPointerException
06-19 13:07:25.950: E/AndroidRuntime(16382): at android.support.v4.app.BackStackRecord.doAddOp(BackStackRecord.java:347)
06-19 13:07:25.950: E/AndroidRuntime(16382): at android.support.v4.app.BackStackRecord.add(BackStackRecord.java:342)
06-19 13:07:25.950: E/AndroidRuntime(16382): at android.support.v4.app.FragmentPagerAdapter.instantiateItem(FragmentPagerAdapter.java:97)
06-19 13:07:25.950: E/AndroidRuntime(16382): at android.support.v4.view.ViewPager.addNewItem(ViewPager.java:649)
06-19 13:07:25.950: E/AndroidRuntime(16382): at android.support.v4.view.ViewPager.populate(ViewPager.java:783)
06-19 13:07:25.950: E/AndroidRuntime(16382): at android.support.v4.view.ViewPager.onMeasure(ViewPager.java:1016)
06-19 13:07:25.950: E/AndroidRuntime(16382): at android.view.View.measure(View.java:12728)
06-19 13:07:25.950: E/AndroidRuntime(16382): at android.widget.RelativeLayout.measureChildHorizontal(RelativeLayout.java:594)
06-19 13:07:25.950: E/AndroidRuntime(16382): at android.widget.RelativeLayout.onMeasure(RelativeLayout.java:376)
06-19 13:07:25.950: E/AndroidRuntime(16382): at android.view.View.measure(View.java:12728)
06-19 13:07:25.950: E/AndroidRuntime(16382): at android.view.ViewGroup.measureChildWithMargins(ViewGroup.java:4698)
06-19 13:07:25.950: E/AndroidRuntime(16382): at android.widget.FrameLayout.onMeasure(FrameLayout.java:293)
06-19 13:07:25.950: E/AndroidRuntime(16382): at android.view.View.measure(View.java:12728) …Run Code Online (Sandbox Code Playgroud) 我想在Android片段中使用XML定义自定义属性(不使用捆绑其他参数),就像declare-styleable在自定义控件中一样.但是没有带有AttrSet参数的构造函数,所以它可能吗?我可以覆盖public void onInflate(android.app.Activity activity, android.util.AttributeSet attrs, android.os.Bundle savedInstanceState)以获得属性支持吗?
我对这些功能和它们的目的非常困惑.我观察到,使用新的replace()替换现有的片段.我们可以使用addToBackStack(null)将该片段放在后面的堆栈中,这样我们就可以回到之前显示的片段了.现在当一个片段被添加(或替换) - onAttach()- > onCreate()etc ....片段的方法按顺序调用.
现在,当我们remove()从我们的活动中调用片段时,片段的哪些函数被调用以及按什么顺序?
做什么attach()和detach()做什么?是否detach()删除片段?并且这两个时attach()和detach()使用时,该片段的功能调用,并且在该阶ΣΔ
还有什么呢popBackStack()?我的意思是当我们popBackStack()从我们的活动中使用片段时调用哪些函数?
什么时候onDestroy()调用?
谢谢.
我想动画片段的删除.
我试过了:
getSupportFragmentManager().beginTransaction()
.setCustomAnimations(R.anim.push_down_in, R.anim.push_up_out)
.remove(myFragment)
.commit();
Run Code Online (Sandbox Code Playgroud)
但片段就消失了.
我注意到out动画只播放'replace',所以我尝试用这样的空片段替换片段:
getSupportFragmentManager()
.beginTransaction()
.setCustomAnimations(R.anim.push_down_in, R.anim.push_up_out)
.replace(viewId, new Fragment())
.commit();
Run Code Online (Sandbox Code Playgroud)
但它仍然只是消失了.
那么,我如何动画片段的删除?
我正在通过各种实践来处理线程和AsyncTask的方向更改.我遇到了以下解决方案:
有没有其他方法来处理这种情况?建议的做法是什么?我问这个是因为我在Android文档的任何地方都找不到通用的解决方案.
我有一个使用XML(活动中的setContentView())附加到活动的片段.有一个问题,因为我的片段中有非常动态的视图,因此当方向更改时,我必须恢复所有视图状态.
我有问题,因为我正在使用类似的东西:
public void onSaveInstanceState(Bundle outState) {
super.onSaveInstanceState(outState);
outState.putBoolean("restore", true);
outState.putInt("nAndroids", 2);
}
Run Code Online (Sandbox Code Playgroud)
但是在方向更改后调用param Bundle savedInstanceState的方法时(如onCreateView等),我的savedInstanceState始终为null.
我不是Android中的菜鸟,但现在因为这个问题我很生气...
public void onViewCreated(View view, Bundle savedInstanceState) {
super.onViewCreated(view, savedInstanceState);
if (savedInstanceState == null) {
//smth
} else {
// smthelse THIS IS NEVER REACHED BECAUSE BUNDLE IS ALWAYS NULL
}
getListView().setDivider(getResources().getDrawable(R.drawable.list_divider));
}
Run Code Online (Sandbox Code Playgroud) 我想知道如何使用导航控制器正确处理系统后退按钮操作.在我的应用程序中,我有两个片段(例如片段1和片段2),我在fragment1中有一个目标为fragment2的动作.一切都很好,除了一件事 - 当用户按下fragment2中的系统后退按钮时,我想显示一个对话框(例如使用DialogFragment)来确认退出.实现此行为的最佳方法是什么?如果我app:defaultNavHost="true"在我的主机片段中使用它会自动返回忽略我的规则.此外,这个组件是什么?
我应该使用"pop to"吗?
我有一个活动,里面有三个片段类.尝试从内部更改操作栏标题时出错.如果我尝试使这些类只是公开而不是公共静态,那么当我尝试启动该类时会出现错误.应该很清楚,代码是针对偏好的,尽管这不应该改变任何东西.这是代码:
package com.simon.wikiics;
import android.preference.*;
import android.os.*;
import java.util.*;
public class MainSettingsActivity extends PreferenceActivity {
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
}
@Override
public void onBuildHeaders(List<Header> target) {
loadHeadersFromResource(R.xml.headers, target);
}
//If I don't make the classes static my app force closes when I try to start them
public static class NavigationSettingsActivity extends PreferenceFragment {
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
addPreferencesFromResource(R.xml.navigation);
//The getActionBar() is what is giving me the error
getActionBar().setTitle("Navigation");
}
}
public static class InterfaceSettingsActivity …Run Code Online (Sandbox Code Playgroud) 我刚刚通过的文件去attach()和detach()方法FragmentTransaction:
attach():在先前已从UI分离后重新附加片段detach(Fragment).这会导致其视图层次结构被重新创建,附加到UI并显示.
嗯,这是什么意思?
更具体地说,我看到了一个例子:
mMapFragment = new MapFragment();
ft.beginTransaction(mMapFragment)
.attach()
.add(R.id.container, mMapFragment)
.commit();
Run Code Online (Sandbox Code Playgroud)
我删除了attach()并再次尝试:我没有发现任何差异.什么是attach在这个例子吗?与此相比有何不同:
ft.beginTransaction()
.add(R.id.container, mMapFragment)
.commit();
Run Code Online (Sandbox Code Playgroud)如果上面的例子是不够好,以示区别.我只是想知道做的时候,我们需要调用attach()和detach()明确?如果你可以解释添加/删除/替换方面的差异会更好.
我们正在使用Fragments,我们不需要在重新创建Activity时自动恢复它们.但每当调用Activity::onCreate(Bundle savedInstanceState)- > 时super.onCreate(savedInstanceState),即使我们对这些片段使用setRetainInstance(false),也会恢复片段.
而且,在那些Fragments Fragment.performCreateView()被直接调用而不经过Fragment::onAttach()等等.另外,一些字段在恢复内部为空Fragment...
有谁知道如何阻止Android恢复片段?
PS我们知道,如果为配置更改重新创建活动,可以通过添加到清单a来完成ndroid:configChanges="orientation|screenSize|screenLayout.但是在自动内存清理的情况下重新创建活动呢?
android garbage-collection memory-management fragment recreate
android ×10
fragment ×10
animation ×1
back-stack ×1
bundle ×1
class ×1
navigation ×1
orientation ×1
recreate ×1