gpt4 book ai didi

Android fragment 找不到 id 的 View

转载 作者:太空狗 更新时间:2023-10-29 13:31:48 25 4
gpt4 key购买 nike

我正在尝试为应用程序创建双 Pane /单 Pane 设置。前段时间还好好的,之前我把所有的内脏都放到fragments里了,不知道是什么原因不灵了。当我改变方向时,问题就发生了。起初,出于某种原因,它没有重新创建 View 。它会调用 onCreateView,但我无法在 View 内的 ListView 上获取句柄并且变得空(我知道我的布局适合横向和纵向,因为如果它从那里开始,它可以同时适用于纵向和横向).所以,我所做的是将 setRetainInstance 添加到 true,认为这可以解决我的问题。好吧,这带来了另一个问题,现在我没有找到 Id 的 View 。

我认为现在正在发生的事情是,它试图将自己重新附加到它在方向更改之前拥有的 ID,并且它现在不存在于不同的布局中。我尝试只创建一个新 fragment 并添加它,但这也不起作用。我正在努力尝试使用 Android 的思想 fragment 系统,这几乎是不可能的。任何帮助,将不胜感激。这是相关代码

@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
this.setContentView(R.layout.study_guide);
//Create The Ad Service

//Check to see if the view is landscape or portrait
if (this.findViewById(R.id.singlePaneStudyGuide) != null) {
mDualPane = false;
} else if (this.findViewById(R.id.doublePaneStudyGuide) != null) {
mDualPane = true;
}
LinearLayout layout = (LinearLayout)findViewById(R.id.addbox);
adView = new AdView(this,AdSize.SMART_BANNER,"a1511f0352b42bb");
layout.addView(adView);
AdRequest r = new AdRequest();
r.setTesting(true);
adView.loadAd(r);



//Inflate Fragments depending on which is selected
//if (savedInstanceState == null) {
FragmentManager fm = this.getSupportFragmentManager();
FragmentTransaction ft = fm.beginTransaction();

SGListFragment newFrag = new SGListFragment();

if (mDualPane == true) {
ft.add(R.id.sgScrollContainer, newFrag, "SgListView").commit();
} else {
ft.add(R.id.singlePaneStudyGuide, newFrag, "SgListView").commit();

}
fm.executePendingTransactions();
//}
}

我尝试使用 fragment 管理器查找 fragment 并将其重新分配给不同的布局,但由于某种原因它仍在寻找旧的布局。

最佳答案

您必须按如下方式重写代码:

    //Inflate Fragments depending on which is selected
//if (savedInstanceState == null) {
FragmentManager fm = this.getSupportFragmentManager();
FragmentTransaction ft = fm.beginTransaction();
// here the trick starts
int oldId = (mDualPane == true) ? R.id.singlePaneStudyGuide
: R.id.sgScrollContainer;
Fragment oldFragment = fm.findFragmentById(oldId);
if(null != oldFragment){
ft.remove(oldFragment);
ft.commit();
fm.executePendingTransactions();
ft = fragmentManager.beginTransaction();
}
// end of tricks
SGListFragment newFrag = new SGListFragment();

if (mDualPane == true) {
ft.add(R.id.sgScrollContainer, newFrag, "SgListView").commit();
} else {
ft.add(R.id.singlePaneStudyGuide, newFrag, "SgListView").commit();

}

关于Android fragment 找不到 id 的 View ,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14917919/

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