0

Eclipseでプロジェクトを作成するときに「マスター詳細フロー」を選択すると作成されるプロジェクトは誰もが知っていると思います。ここに画像の説明を入力

左側と右側のレイアウトと、フラグメントと Framelayout をフラグメント コンテナーとして持つ two_pane レイアウトがあります。これはうまくいきます。

今、ビューページャー、フラグメントなどを含む「メイン」アクティビティ A があり、コールバックを使用してフラグメントからアクティビティを呼び出します。そのアクティビティから、AI は新しいアクティビティ B を開始します。そのアクティビティ B は、先ほどお話しした Eclipse のサンプル アクティビティとまったく同じように設定されています。

今、アプリがクラッシュするという問題があります

ERROR/AndroidRuntime(8105): Caused by: java.lang.IllegalArgumentException: Binary XML file line #57: Duplicate id 0x7f080024, tag null, or parent id 0x0 with another fragment for FragmentNumber3

two_pane レイアウトのフラグメントを別のフレームレイアウトに置き換えても、クラッシュしません。この問題は、ネストされたフラグメントの典型的な問題ですが、ネストされたフラグメントはここにはありませんよね? その時点では、アクティビティ A とは何の関係もないアクティビティ B があります。

ここで何が問題なのですか?

編集:これは私のアクティビティBです:

public class sucheActivity extends FragmentActivity implement SearchboxFragment.SearchboxListener {

private boolean mTwoPane;

@Override
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.searchbox);

    getActionBar().setDisplayHomeAsUpEnabled(true);

    if (findViewById(R.id.searchresult_container) != null) {

        mTwoPane = true;
    }
}
}

これがアクティビティの two_pane レイアウトです。検索ボックスは左に、検索結果は右に配置する必要があります。

<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:layout_marginLeft="16dp"
    android:layout_marginRight="16dp"
    android:baselineAligned="false"
    android:divider="?android:attr/dividerHorizontal"
    android:orientation="horizontal"
    android:showDividers="middle" >

    <fragment
        android:id="@+id/searchbox_fragment"
        android:name="com.example.layouttest.SearchboxFragment"
        android:layout_width="0dp"
        android:layout_height="match_parent"
        android:layout_weight="1"/>

    <FrameLayout
        android:id="@+id/searchresult_container"
        android:layout_width="0dp"
        android:layout_height="match_parent"
        android:layout_weight="3" />

</LinearLayout>

SearchboxFragment クラスは次のとおりです。

public class SearchboxFragment extends Fragment {

SearchboxListener mCallback;
View v;

public interface SearchboxListener {
    public void onSearchStarted();
}

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

    v = inflater.inflate(R.layout.searchbox, container, false);


    return v;
}
}

検索結果フラグメント:

public class SearchResultFragment extends Fragment {


public SearchResultFragment() {
}

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

}

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

    return inflater.inflate(R.layout.searchresult, container, false);
}

@Override
public void onViewCreated(View view, Bundle savedInstanceState) {

    super.onViewCreated(view, savedInstanceState);

}

}

res/values-large の refs.xml:

<resources>

    <item name="searchbox" type="layout">@layout/haussuche_twopane</item>

</resources>
4

1 に答える 1

0

さて、これが私が見つけたものです:

アクティビティのレイアウトを searchbox.xml に設定できず (そして、refs.xml で two_pane.xml にエイリアスを設定)、SearchboxFragment のレイアウトを searchbox.xml に設定できません。

2 ペイン モードのアクティビティでは searchbox.xml が表示されることはなく、別の場所に安全に設定できると思っていましたが、それは誤りです。

私がしたことは、そのレイアウトをコピーして、searchbox_onepane.xml と searchbox_twopane.xml を使用することでした。

于 2013-02-20T13:32:17.037 に答える