18

フラグメントを作成できるという問題があり、そのビューは作成されているように見えますが、表示されません。フラグメント自体が作成され、内部のコードは問題なく実行されますが、どこかで見えないだけです。戻るボタンも問題なく操作でき (「閉じる」)、物理的に画面に表示されません (メイン レイアウトのみが表示されます)。

私の FragmentActivity から:

protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_main_view);

    // some logic here that sets a button listener that calls openAddNamePane() when pressed
}

public void openAddNamePane(){
    AddNamePane addNamePane = new AddNamePane();
    FragmentManager fragmentManager = getSupportFragmentManager();
    FragmentTransaction fragmentTransaction = fragmentManager.beginTransaction();
    fragmentTransaction.replace(R.id.layout_root, addNamePane, "AddnamePane");
    fragmentTransaction.addToBackStack(null);
    fragmentTransaction.commit();
}

これは、最初に表示されるビューのレイアウトです (activity_main_view.xml 別名「ルート レイアウト」)。

<LinearLayout 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"

    android:paddingBottom="@dimen/activity_vertical_margin"
    android:paddingLeft="@dimen/activity_horizontal_margin"
    android:paddingRight="@dimen/activity_horizontal_margin"
    android:paddingTop="@dimen/activity_vertical_margin"

    android:orientation="vertical"

    android:background="@color/white"
    android:id="@+id/layout_root">

    <LinearLayout 
        android:layout_width="match_parent"
        android:layout_height="wrap_content">

        <Button android:id="@+id/addPlayerButton"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:text="Add Player" />

        <Button android:id="@+id/button2"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:text="@string/buttonLabel" />
    </LinearLayout>


    <ListView android:id="@+id/playerListView"
        android:layout_width="match_parent"
        android:layout_height="match_parent"
        android:cacheColorHint="@color/white"
        android:entries="@array/testStringArray" >
    </ListView>

</LinearLayout>

これは私のフラグメントクラスです:

public class AddNamePane extends Fragment {
    public void onCreate(Bundle savedInstanceState){
        super.onCreate(savedInstanceState);
    }

    public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) {
        System.out.println("AddNamePane.onCreateView()");

        View view = inflater.inflate(R.layout.add_player_pane_layout, container, false);

        return view;
    }

    // a few other methods here, onAttach(), onStop(), onPause(), etc
    // all are empty of logic with just a println to see if they are being called correctly (in which they are)
}

これは、その「AddNamePane」フラグメントのレイアウトです。

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:layout_width="match_parent"
    android:layout_height="match_parent"

    android:paddingBottom="@dimen/activity_vertical_margin"
    android:paddingLeft="@dimen/activity_horizontal_margin"
    android:paddingRight="@dimen/activity_horizontal_margin"
    android:paddingTop="@dimen/activity_vertical_margin"

    android:orientation="vertical" >

    <EditText
        android:id="@+id/editText1"
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:ems="10" 
        android:text="test name here"
        android:hint="Name here" >
        <requestFocus />
    </EditText>

    <Button
        android:id="@+id/button1"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:text="Button" />

</LinearLayout>

私の問題がコードにあるのか、それともレイアウトに関係しているのかはよくわかりません。私の目標は、メイン ビューを一時的に置き換える「ルート レイアウト」に「AddNamePane」を追加することです。これを試みるために私がしたことは、ルート レイアウトに ID を与え、それを FragmentTransaction で使用することでした。問題があれば、私が使用している API レベルは 8 (Android 2.2) であるため、android.support.v4.app パッケージのものを使用しています。

4

3 に答える 3

19

プログラムで a を置き換えようとしていLinearLayoutますが、ハードコードされた子を持つことも期待しています。これはうまくいきません。の子でもあるFrameLayoutを for に使用する必要があります。FragmentTransactionlayout_root

投稿を実際の xml で更新すると、その方法を正確に示すことができます。

于 2013-09-19T02:09:34.913 に答える
5

フラグメントが表示されないときに、同様の問題がありました。問題は、AndroidAnnotations を削除したことですが、コードを onViewCreated および onCreate メソッドから onCreateView に移動するのを忘れていました。2 つのフラグメントのコードを比較して、この間違いを見つけました。一方は表示され、もう一方は表示されませんでした。したがって、同様の問題がある場合は、フラグメントのコードを確認してみてください。一見するとエラーが表示されない場合がありますが、これらのエラーが原因で機能したり、表示されたりすることはありません。

特に、このメソッドがあり、ビューをインフレートしていることを確認してください。

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

    View v = inflater.inflate(R.layout.your_fragment_layout, container, false);
    return v;

}
于 2014-09-08T16:35:32.497 に答える