2017-06-16 105 views
0

我注意到我的片段之一的onCreateView()永远不会被调用,我不知道为什么。我需要能够在onResume()中进行更改,但那也永远不会被调用。片段onCreateView永远不会被调用

这是我如何添加片段。

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); 
} 

Tab1Fragment

​​

而且finnaly的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> 

下穿过我想我可能已经创建的片段走错了路。正如你看到它现在他们创建为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职位的代码,因为他们几乎是相同的。我也有

EDIT2

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

回答

1

问题的另一项活动是这样的:

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

在您需要的第一个参数将一个id传递给活动布局中的一个容器,您的片段将被附加到该容器中。

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

添加容器视图中activity_live_game_stats xml文件,

<?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(); 
    } 
+0

我发布了一个编辑,我试过你的方法。你可以看看它并张贴在这里 – user2907139

相关问题