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>