mobile tutsによって作成された 2 ペインの例に従って、3 ペイン ビュー レイアウト (古典的な「マスター詳細」フロー) を使用してアプリケーションを開発しています。
3 ペインのレイアウトは次のようになります。
<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="0dp"
android:layout_marginRight="0dp"
android:background="?android:attr/detailsElementBackground"
android:divider="?android:attr/dividerHorizontal"
android:orientation="horizontal"
android:showDividers="middle"
tools:context=".SListA" >
<!--
This layout is a three-pane layout for the
master/detail flow.
-->
<fragment
android:id="@+id/s_list"
android:name="com.xxxxx.xxxxxx.SListF"
android:layout_width="0dp"
android:layout_height="match_parent"
android:layout_weight="1" />
<FrameLayout
android:id="@+id/s_events"
android:paddingLeft="4dp"
android:layout_width="0dp"
android:layout_height="match_parent"
android:layout_weight="1" />
<FrameLayout
android:id="@+id/s_details"
android:paddingLeft="4dp"
android:layout_width="0dp"
android:layout_height="match_parent"
android:layout_weight="0.5" />
上記の 3 ペイン ビュー (ワイド/ランドスケープ タブレット モード) で 3 番目のフラグメント パネルを置き換えようとしたときに問題が発生しました。エラーは、下のコードの最後の行にあり、中央のパネル フラグメント コードから実行されます。
@Override
public void setEventKey(String event_key) {
if (SListA.m3Pane) {
// In three-pane mode, show the details view in this activity by
// adding or replacing the details fragment using a
// fragment transaction.
Bundle arguments = new Bundle();
arguments.putString(SDetailsF.ARG_EVENTKEY, event_key);
SDetailsF fragment = new SDetailsF();
fragment.setArguments(arguments);
getFragmentManager().beginTransaction()
.replace(R.id.s_details, fragment).commit();
}
上記のコードの最後の行は、コンパイル エラーを示しています。
Fragment 型から非静的メソッド getFragmentManager() への静的参照を作成できません
(注、minSdkVersion=11 を設定しました)。
2 番目 (中央) のパネルのフラグメントを置き換えるために同一のコードが使用されていますが、3 番目のパネルでは機能しない理由がわかりません。唯一の違いは、2 番目 (中央) のパネルのフラグメント置換コードが (2 番目のパネル) フラグメント コードではなく、(1 番目のパネル) アクティビティ コード内から実行されることです。
コンパイル エラーが発生することなく、上記の問題コードを次のコードに置き換えることができました。
fragment.getFragmentManager().beginTransaction()
.replace(R.id.s_details, fragment).commit();
ただし、このコードは実行中に InvocationTargetException メッセージで実行されるとクラッシュします。
「ソースが見つかりません」
この問題を修正する方法についてのアイデアをいただければ幸いです。