1

これはいくつかの投稿に関連していますが、ビュー階層でのビュー作成の順序を説明するものは何も表示されません (静的 - xml および動的 - コード内)。

アクティビティとフラグメントをホストする FragmentActivity があります。フラグメントの onCreateView が呼び出される前に、フラグメントに対して作成されていないビューから実行時エラーが発生します。ステップスルー中にデバッガーが正しい行番号を見つけることができないように見えるため、ビューを見つけることができない呼び出しメソッドが何であるかを判断することは困難です。

dl されたソースと .jar の間に不一致があるように見えるため、ソースを正しくアタッチして FragmentManager の内部を確認できません。

StreamingActivity.onCreateView に Log.i エントリを配置しましたが、その前にエラーが発生しました。

関連する LogCat は次のとおりです。

07-19 10:13:36.091: I/StreamingActivity(9886): onCreate
07-19 10:13:42.271: W/dalvikvm(9886): threadid=1: thread exiting with uncaught exception (group=0x40020560)
07-19 10:13:42.281: E/AndroidRuntime(9886): FATAL EXCEPTION: main
07-19 10:13:42.281: E/AndroidRuntime(9886): java.lang.RuntimeException: Unable to start activity   
ComponentInfo{kesten.fragmentstestbed/kesten.fragmentstestbed.FragmentsMainActivity}:        
java.lang.IllegalArgumentException: No view found for id 0x7f05002e for fragment 
StreamingActivity{4052f810 #0 id=0x7f05002e}
caused by
java.lang.IllegalArgumentException: No view found for id 0x7f05002e for fragment 
StreamingActivity{40530948 #0 id=0x7f05002e}
at android.support.v4.app.FragmentManagerImpl.moveToState(FragmentManager.java:865)

私のJavaファイルのスニペット:

public class FragmentsMainActivity extends FragmentActivity {

public final static int STARTUP_ACTIVITY_RESULT=0;

@Override
public void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_fragments_main);

    if(savedInstanceState == null) {
        Intent intentStartupActivity = new Intent(this, StartupActivity.class);
        if(intentStartupActivity != null)
            startActivityForResult(intentStartupActivity, STARTUP_ACTIVITY_RESULT);

        // get an instance of FragmentTransaction from your Activity
        FragmentTransaction fragmentTransaction = 
                getSupportFragmentManager().beginTransaction();

        //add a fragment
        StreamingActivity streamingActivity = new StreamingActivity();
        if (streamingActivity != null) {
            fragmentTransaction.add(R.id.streamingactivity, streamingActivity);
            fragmentTransaction.commit();
        }
    }
}

私のフラグメント:

public class StreamingActivity extends Fragment {

public void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    Log.i("StreamingActivity","onCreate")   
}

私のレイアウトファイル:「res/layout/main.xml」

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

    <FrameLayout
    android:id="@+id/streamingactivity"
    android:layout_width="0px"
    android:layout_height="match_parent">
</FrameLayout>


<!-- IMU -->
<TextView
    android:id="@+id/imu_label"
    style="@style/Label.Title"
    android:text="@string/imu"
    />

<kesten.fragmentstestbed.ImuView
    android:id="@+id/imu_values"
    android:layout_width="wrap_content"
    android:layout_height="wrap_content"
    android:layout_below="@+id/imu_label"
    android:text=""
    />

<!-- Accelerometer -->
<TextView
    android:id="@+id/accelerometer_label"
    style="@style/Label.Title"
    android:text="@string/accelerometer"
    android:layout_below="@+id/imu_values"
    />

<!-- Filtered -->
<kesten.fragmentstestbed.CoordinateView
    android:id="@+id/accelerometer_filtered_coordinates"
    android:layout_width="wrap_content"
    android:layout_height="wrap_content"
    android:layout_below="@+id/accelerometer_label"
    android:text="@string/filtered"
    />

</RelativeLayout>

FragmentActivityの「activity_fragments_main.xml」

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

    <TextView
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_centerHorizontal="true"
        android:layout_centerVertical="true"
        android:padding="@dimen/padding_medium"
        android:text="@string/hello_world"
        tools:context=".FragmentsMainActivity" />

</RelativeLayout>

他の Stackoverflow スレッドから収集された id not found エラーの考えられる原因:

  • FragmentActivity の onCreate() メソッドの setContentView() の間違ったレイアウト。

確認したところ、xml ファイルはすべてそこにあります。構文エラーがあるか、リンクされたリソースが欠落している可能性がありますが、表示できません。HierarchyViewer が UI をデバッグするための便利なツールであることは理解していますが、機能させることができません。

  • FragmentTransaction.add に渡される ID は、setContentView で指定されたレイアウトの子である必要があります。

私の FragmentActivity の onCreate @Override public void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_fragments_main);

私のフラグメントの onCreateView

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

    Log.i("StreamingActivity","onCreateView");      
    View view = inflater.inflate(R.layout.main, container, false);

LayoutManager がコンテナーの正しい値、つまり FragmentActivity の setContentView() で設定された値を渡すと思います。しかし、とにかくそこにたどり着くことはありません。onCreateView() に入る前に、logCat のエラーが発生します。

atm について考えることができる唯一のことは、setContentView の後、StreamingActivity の前に呼び出される startupActivity (クローズド サード パーティ) が、コンテンツ ビューを R.layout.activity_fragments_main 以外のものに設定することです。これは、フラグメントのビューの親ではありません。

この問題は、アクティビティにはいつでも呼び出すことができる setContentView がありますが、フラグメントには、フラグメントを開始するフラグメントトランザクションの後に呼び出される onCreateView() しかないという事実に起因しているようです。

onCreateView() が呼び出される前にフラグメントのビューにアクセスしようとするのはなぜですか?

ダルコラム

4

3 に答える 3

0

以下が入ってFrameLayoutいるはずですactivty_fragments_main

   <FrameLayout
    android:id="@+id/streamingactivity"
    android:layout_width="0px"
    android:layout_height="match_parent">
</FrameLayout>

以下の関数は、最初の引数で提供されたレイアウト内にフラグメントを追加します。

 fragmentTransaction.add(R.id.streamingactivity, streamingActivity);

変更してみてください:

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

    <TextView
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_centerHorizontal="true"
        android:layout_centerVertical="true"
        android:padding="@dimen/padding_medium"
        android:text="@string/hello_world"
        tools:context=".FragmentsMainActivity" />

</RelativeLayout>

に:

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


   <FrameLayout
    android:id="@+id/streamingactivity"
    android:layout_width="match_parent"
    android:layout_height="match_parent">
</FrameLayout>

</RelativeLayout>
于 2014-02-27T13:08:38.417 に答える
0

activty_fragments_mainTextViewには ID がありません。同様のエラーが発生し、ID を追加したところ、突然すべてが機能し始めました...

于 2012-08-07T05:47:36.150 に答える