2016-05-13 37 views
2

私は、フラグメントをアクティビティの既定のビューとして読み込もうとしていますが、空白の画面と大きなメモリリークが発生します。アクティビティ起動時の既定のフラグメント

活動ファイルonCreate方法:

@Override 
protected void onCreate(Bundle savedInstanceState) { 
    super.onCreate(savedInstanceState); 

    setContentView(R.layout.activity_login); 

    if (savedInstanceState == null) { 
     FragmentManager fragmentManager = getFragmentManager(); 
     int fragmentTransaction = fragmentManager.beginTransaction() 
       .add(R.id.login_screen_fragment, new FragmentLogin()) 
       .commit(); 
    } 
} 

活動のためのXML:

<FrameLayout xmlns:android="http://schemas.android.com/apk/res/android" 
    xmlns:tools="http://schemas.android.com/tools" 
    android:layout_width="match_parent" 
    android:layout_height="match_parent" 
    tools:context=".LoginActivity"> 

    <fragment 
     android:layout_width="match_parent" 
     android:layout_height="wrap_content" 
     android:id="@+id/login_screen_fragment" 
     class="com.test.project.FragmentLogin" 
    /> 

    <fragment 
     android:layout_width="match_parent" 
     android:layout_height="wrap_content" 
     android:id="@+id/forgotten_password_fragment" 
     class="com.test.project.FragmentForgottenPassword" 
    /> 
</FrameLayout> 

とフラグメントのクラス(関連部分):

@Override 
public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) { 

    final View view = inflater.inflate(R.layout.fragment_login, container, false); 
    final Activity activity = getActivity(); 

    ... code ... 

    return view; 
} 

私はAからの指示に従っチュートリアル誰かが別の質問から以前に提案したが、私はsomethiをしている必要があります恐ろしく間違っています。何か案は?

+0

は、あなたのコード内で動的にそれらをロードする必要はありません。 –

+0

@MikeM。私はどこでこれをしていますか? – mwieczorek

+0

'if'ブロックは、' FragmentLogin'インスタンスを動的にインスタンス化して処理しています。 –

答えて

0

フラグメント要素をFrameLayoutに置き換えるだけで、フラグメントが表示されます。

0

フラグメントをプログラマチックに追加する場合は、Framelayout内の<Fragment>を削除し、IDを追加します。

それは次のようになります。

<FrameLayout xmlns:android="http://schemas.android.com/apk/res/android" 
     xmlns:tools="http://schemas.android.com/tools" 
     android:id="@+id/login_screen_fragment" 
     android:layout_width="match_parent" 
     android:layout_height="match_parent" 
     tools:context=".LoginActivity" /> 
2

xmlファイル

<FrameLayout xmlns:android="http://schemas.android.com/apk/res/android" 
xmlns:tools="http://schemas.android.com/tools" 
android:id="@+id/changeFragment" 
android:layout_width="match_parent" 
android:layout_height="match_parent" 
tools:context=".LoginActivity"> 
</FrameLayout> 

あなたの活動

@Override 
protected void onCreate(Bundle savedInstanceState) { 
super.onCreate(savedInstanceState); 

setContentView(R.layout.activity_login); 

if (savedInstanceState == null) { 
    FragmentLogin f1= new FragmentLogin(); 
    FragmentTransaction fragmentTransaction = getSupportFragmentManager().beginTransaction(); 
    fragmentTransaction.add(R.id.changeFragment, f1); 
    fragmentTransaction.commit(); 

    } 
} 
1

私は、Androidに新たなんだと私はに走りました同じ問題。私は私の方法を固定しました。

したがって、onCreateメソッドでは、FragmentManagerクラスのgetSupportFragmentManager()を使用し、次にFragmentTransactionを個別に宣言します。下記参照。私は私の場合にこれを行い、それは働いた。

@Override 
protected void onCreate(Bundle savedInstanceState) { 
super.onCreate(savedInstanceState); 

setContentView(R.layout.activity_login); 

if (savedInstanceState == null) { 
    FragmentManager fragmentManager = getSupportFragmentManager(); 
    FragmentTransaction fragmentTransaction = fragmentManager.beginTransaction(); 
    fragmentTransaction.add(R.id.login_screen_fragment, new FragmentLogin()); 
    fragmentTransaction.commit(); 
} 

これはあなたの問題を解決するのにも役立ちます。

敬具、あなたはレイアウトの `` 要素を定義 sylvery

関連する問題