2017-06-16 28 views
0

私のフラグメントのうちの1つの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

​​

そして私は私が断片間違った方法を作成しているかもしれないと思う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をfinnaly。あなたが今見ているように、xmlの記述どおりに作成されますが、タブを変更したときにコンテンツが「リセット」されます。onCreateView()またはonResume()に変更されたものは呼び出されません。

EDIT

私は第一のコメントに記載された方法を実施することを試みました。実装後、タブの内容は同じです。すべてのタブに同じ内容があるようです。今回私はすべてのクラスと関連する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からコードを投稿する文句を言いません。あなたが持っている最初の引数で

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

:私も

EDIT2は

iはgetSupportFragmentManager().beginTransaction().add(android.R.id.tabcontent, new LiveGameTab1Fragment()).commit();

答えて

1

問題にgetSupportFragmentManager().beginTransaction().add(R.id.liverealtabcontent, new LiveGameTab1Fragment()).commit();から変更されたときにそのが解決思える別のアクティビティを持っていることはこれですあなたのフラグメントが添付されるActivityレイアウトのコンテナにIDを渡します。

レイアウト全体を渡しています。

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

関連する問題