gpt4 book ai didi

android - 切换 fragment 错误

转载 作者:搜寻专家 更新时间:2023-11-01 07:52:50 26 4
gpt4 key购买 nike

try {
FragmentManager manager = getSupportFragmentManager();

FragmentTransaction transaction = manager.beginTransaction();
transaction.setCustomAnimations(android.R.anim.fade_in,
android.R.anim.fade_out);
transaction.replace(R.id.record_container, fragment, mark);
transaction.commit();
//manager.executePendingTransactions();
} catch (Exception e) {
Log.e("my", "replaceFrag error");
}

当我在我的三个 Fragment 之间切换时,有时会抛出这个错误:

java.lang.IllegalStateException: No host
at android.support.v4.app.FragmentManagerImpl.moveToState(FragmentManager.java:1184)
at android.support.v4.app.FragmentManagerImpl.moveToState(FragmentManager.java:1179)
at android.support.v4.app.FragmentManagerImpl.dispatchActivityCreated(FragmentManager.java:1991)
at android.support.v4.app.Fragment.performActivityCreated(Fragment.java:1976)
at android.support.v4.app.FragmentManagerImpl.moveToState(FragmentManager.java:1041)
at android.support.v4.app.FragmentManagerImpl.moveToState(FragmentManager.java:1197)
at android.support.v4.app.BackStackRecord.run(BackStackRecord.java:738)
at android.support.v4.app.FragmentManagerImpl.execPendingActions(FragmentManager.java:1562)
at android.support.v4.app.FragmentManagerImpl$1.run(FragmentManager.java:483)
at android.os.Handler.handleCallback(Handler.java:733)
at android.os.Handler.dispatchMessage(Handler.java:95)
at android.os.Looper.loop(Looper.java:136)
at android.app.ActivityThread.main(ActivityThread.java:5047)
at java.lang.reflect.Method.invokeNative(Native Method)
at java.lang.reflect.Method.invoke(Method.java:515)
at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:793)
at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:609)
at dalvik.system.NativeStart.main(Native Method)

日志显示 No host,但我不知道主机是什么?

fragment 是这样创建的:

if (intent.getAction().equals(Constants.P2P.RET_GET_PLAYBACK_FILES)) {
Log.e("waitload", "waitload=" + waitload);
if (null == rlFrag) {
rlFrag = new RecordListFragment();
rlFrag.setUser(contact);
}
String[] names = (String[]) intent
.getCharSequenceArrayExtra("recordList");
list = new ArrayList<String>();
for (String str : names) {
list.add(str);
}
if (waitload > 0) {
rlFrag.setList(list);
isLoadingChange = false;
madapter.setList(list);
madapter.notifyDataSetChanged();
replaceFrag(rlFrag, fragments[0]);
waitload--;
Log.e("waitload", "loaded" + waitload);
} else {
madapter.upLoadData(list);
Intent it = new Intent();
it.setAction(Constants.Action.REPEAT_LOADING_DATA);
// it.putStringArrayListExtra("adddata", (ArrayList<String>)
// list);
sendBroadcast(it);
}
} else if (intent.getAction().equals(
Constants.P2P.ACK_RET_GET_PLAYBACK_FILES)) {
if (null == faultFrag) {
faultFrag = new FaultFragment();
}
int result = intent.getIntExtra("result", -1);
if (result == Constants.P2P_SET.ACK_RESULT.ACK_PWD_ERROR) {
finish();
T.showShort(mContext, R.string.password_error);
} else if (result == Constants.P2P_SET.ACK_RESULT.ACK_NET_ERROR) {
Log.e("my", "net error resend:set npc time");
faultFrag.setErrorText(getResources().getString(
R.string.net_error));
waitload = 0;
replaceFrag(faultFrag, fragments[2]);
} else if (result == Constants.P2P_SET.ACK_RESULT.ACK_INSUFFICIENT_PERMISSIONS) {
finish();
T.showShort(mContext, R.string.insufficient_permissions);
}
}

最佳答案

看一下FragmentManagerImpl的源码SourceCodeLink , int 方法 moveToState, 你会看到

if (mActivity == null && newState != Fragment.INITIALIZING) {
throw new IllegalStateException("No activity");
}

所以,“No Host”意味着“No activity”,我猜想当你在三个 Fragment 之间切换时,会抛出一个异常导致你的 App 崩溃并使宿主 Activity 为空。

关于android - 切换 fragment 错误,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/32433330/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com