0

これはコードです:

public class HelpDetailsFragment extends Fragment
{
private static final String TAG = "MeMoGame";
public static HelpDetailsFragment newInstance(int index) 
{
    HelpDetailsFragment detailFragment = new HelpDetailsFragment();
    Bundle bundleArgs = new Bundle();
    bundleArgs.putInt("index", index);
    detailFragment.setArguments(bundleArgs);
    return detailFragment;
}   // newInstance()

@Override
public View onCreateView(LayoutInflater inflater,
             ViewGroup container,
             Bundle savedInstanceState)
{
    if(container == null)
    {
    Log.i(TAG, "Different layouts and in one this fragment's containing frame does not exist.");

        return null;
    } else {
        // I checked that container is NOT null
        Log.i(TAG, "This is the parent view that the fragment's UI should be attached to.");
    }
    View mView = new View(getActivity());
    container.addView(mView);
    return container;
}

次のエラー メッセージが表示されます: AndroidRuntime(785): 原因: java.lang.IllegalStateException: 指定された子には既に親があります。最初に子の親で removeView() を呼び出す必要があります。

誰かが私が間違っていることを説明してもらえますか?

私がする時:

View mView = new View(getActivity());
TextView text = (TextView) new TextView()
mView.addView(text);
return mView;

同じエラー メッセージが表示されます。

私の救いはここにあります:

    @Override
public View onCreateView(LayoutInflater inflater,
         ViewGroup container,
         Bundle savedInstanceState)
{
    Context context = getActivity();

    FrameLayout frameLayout = new FrameLayout(context);
        int height = (int) TypedValue.applyDimension(
                TypedValue.COMPLEX_UNIT_DIP, 50, getActivity()
                .getResources().getDisplayMetrics());
        int padding = (int) TypedValue.applyDimension(
                TypedValue.COMPLEX_UNIT_DIP, 10, context
                .getResources().getDisplayMetrics());

        // set the header
        TextView headText = new TextView(context);
        headText.setHeight(height);
        headText.setPadding(padding, 0, 0, 0);
        headText.setTextAppearance(context, R.style.details_Header);
        headText.setText(HelpScreenData.HELP_HEADERS[getCurrentIndex()]);   
        frameLayout.addView(headText);

        ScrollView scroller = new ScrollView(context);
            // set detail text
            TextView detailText = new TextView(context);    
            detailText.setPadding(padding, padding + height, padding, padding);
            detailText.setTextSize(TypedValue.COMPLEX_UNIT_DIP, 18);
             detailText.setText(HelpScreenData.HELP_DETAILS[getCurrentIndex()]);        
        scroller.addView(detailText);
    frameLayout.addView(scroller);

    return frameLayout;

}   // onCreateView()

説明はまだ大歓迎です!

4

1 に答える 1

2

ここでの問題は、コンテナーを返すことですreturn container;。この場合、mView を返す必要があります。コンテナーは、アクティビティ レイアウト内のフラグメントの実際のコンテナーです。

于 2013-08-22T20:13:44.397 に答える