gpt4 book ai didi

android - 永远不会调用 fragment onCreateView

转载 作者:行者123 更新时间:2023-11-29 19:12:55 27 4
gpt4 key购买 nike

我注意到我的一个 fragment 的 onCreateView() 从未被调用,我不知道为什么。我需要能够在 onResume() 中进行更改,但是那也从未被调用。

这是我添加 fragment 的方法。

public class LiveGameStats extends FragmentActivity {

@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_live_game_stats);

if (savedInstanceState == null) {
getSupportFragmentManager().beginTransaction().add(R.id.tab1, new Tab1Fragment()).commit();
}

FragmentTabHost mTabHost = (FragmentTabHost) findViewById(R.id.liveGameTabhost);
mTabHost.setup(LiveGameStats.this, getSupportFragmentManager(), R.id.liverealtabcontent);
mTabHost.addTab(mTabHost.newTabSpec("tab1").setIndicator("You"),
LiveGameTab1Fragment.class, null);
mTabHost.addTab(mTabHost.newTabSpec("tab2").setIndicator("Your Team"),
LiveGameTab2Fragment.class, null);
mTabHost.addTab(mTabHost.newTabSpec("tab3").setIndicator("Your Enemies"),
LiveGameTab3Fragment.class, null);
}

Tab1 fragment

public class Tab1Fragment extends Fragment {

@Override
public View onCreateView(LayoutInflater inflater, ViewGroup container,
Bundle savedInstanceState) {
View V = inflater.inflate(R.layout.tab1, container, false);
Log.v("FRAGMENT","FragmentActivityCreateView");
return V;
}

最后,xml 在 R.layout.tab1

下传递
<?xml version="1.0" encoding="utf-8"?>
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:app="http://schemas.android.com/apk/res-auto"
xmlns:tools="http://schemas.android.com/tools"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:orientation="vertical"
tools:context=".DeviceFragment" >

<ImageButton
android:id="@+id/searchBtn"
android:src="@drawable/waves"
android:background="@drawable/search_selector"
android:padding="40dp"
android:layout_height="200dp"
android:layout_width="200dp"
android:onClick="liveMatch"
android:layout_centerVertical="true"
android:layout_centerHorizontal="true" />
</RelativeLayout>

我想我可能以错误的方式创建了 fragment 。正如您现在看到的那样,它们是按照 xml 说明创建的,但是当我更改选项卡时,内容被“重置”。我在 onCreateView()onResume() 中放置的任何更改> 未被调用。

编辑

我已尝试实现第一条评论中描述的方法。实现后,选项卡具有相同的内容。就像所有选项卡都具有相同的内容一样。这次我发布了我所有的类及其相关的 XML。

public class LiveGameStats extends FragmentActivity {

@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_live_game_stats);

if (savedInstanceState == null) {
getSupportFragmentManager().beginTransaction().add(R.id.liverealtabcontent, new LiveGameTab1Fragment()).commit();
getSupportFragmentManager().beginTransaction().add(R.id.liverealtabcontent, new LiveGameTab2Fragment()).commit();
getSupportFragmentManager().beginTransaction().add(R.id.liverealtabcontent, new LiveGameTab3Fragment()).commit();

}

FragmentTabHost mTabHost = (FragmentTabHost) findViewById(R.id.liveGameTabhost);
mTabHost.setup(LiveGameStats.this, getSupportFragmentManager(), R.id.liverealtabcontent);
mTabHost.addTab(mTabHost.newTabSpec("tab1").setIndicator("You"),
LiveGameTab1Fragment.class, null);
mTabHost.addTab(mTabHost.newTabSpec("tab2").setIndicator("Your Team"),
LiveGameTab2Fragment.class, null);
mTabHost.addTab(mTabHost.newTabSpec("tab3").setIndicator("Your Enemies"),
LiveGameTab3Fragment.class, null);
}

activity_live_game_stats.xml

<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:tools="http://schemas.android.com/tools"
android:id="@+id/activity_live_game_stats"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:background="@android:color/holo_blue_light"
tools:context="lucian.leagueassistant.activity.LiveGameStats">


<android.support.v4.app.FragmentTabHost xmlns:android="http://schemas.android.com/apk/res/android"
android:id="@+id/liveGameTabhost"
android:layout_width="match_parent"
android:layout_height="match_parent">

<LinearLayout
android:layout_width="match_parent"
android:layout_height="match_parent"
android:orientation="vertical">

<TabWidget
android:id="@android:id/tabs"

android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_weight="0"
android:orientation="horizontal" />

<FrameLayout
android:id="@android:id/tabcontent"
android:layout_width="0dp"
android:layout_height="0dp"
android:layout_weight="0" />

<FrameLayout
android:id="@+id/liverealtabcontent"
android:layout_width="match_parent"
android:layout_height="0dp"
android:layout_weight="1" />

</LinearLayout>
</android.support.v4.app.FragmentTabHost>
</LinearLayout>

我不会发布 LiveGameTab2LiveGameTab3 的代码,因为它们几乎相同。我还有另一项 Activity

编辑2

当我从 getSupportFragmentManager().beginTransaction().add(R.id.liverealtabcontent, new LiveGameTab1Fragment()).commit(); 更改为 getSupportFragmentManager() 时,它似乎已解决.beginTransaction().add(android.R.id.tabcontent, new LiveGameTab1Fragment()).commit();

最佳答案

问题是这样的:

getSupportFragmentManager().beginTransaction().add(R.id.tab1, new Tab1Fragment()).commit();

在第一个参数中,您必须将一个 id 传递给 Activity 布局中的容器,您的 fragment 将被附加到该容器中。

您正在传递整个布局 R.id.tab1

activity_live_game_stats xml文件中添加容器 View ,

<?xml version="1.0" encoding="utf-8"?>
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:app="http://schemas.android.com/apk/res-auto"
xmlns:tools="http://schemas.android.com/tools"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:orientation="vertical"
tools:context=".DeviceFragment" >

<FrameLayout
android:id="@+id/myContainer"
...(Other attrs)>
</FrameLayout>

</RelativeLayout>

然后

  if (savedInstanceState == null) {
getSupportFragmentManager().beginTransaction().add(R.id.myContainer, new Tab1Fragment()).commit();
}

关于android - 永远不会调用 fragment onCreateView,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/44598793/

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