1

私はアンドロイドプログラミングの初心者です。私はフラグメントでプログラムを書きたいです、私はこのチュートリアル(http://www.mysamplecode.com/2012/08/android-fragment-example.html)を読んでそれを書きますが、プログラムを実行すると、プログラムにはコンパイラがありますエラー!エラーは add() および replace() 関数に関するものです。

以下に AndroidFragmentActivity クラスを書きます。これを読んで助けてください。

AndoridFragmentActivity.java:

package com.appfragmentarray;

import android.app.Activity;
import android.os.Bundle;
import android.support.v4.app.FragmentTransaction;
import android.support.v4.app.FragmentActivity;
 import android.util.Log;

import com.appfragmentarray.ListFragment.OnURLSelectedListener;

public class AndroidFragmentActivity extends Activity implements OnURLSelectedListener{
     boolean detailPage = false;

 @Override
 public void onCreate(Bundle savedInstanceState) {
  super.onCreate(savedInstanceState);
  Log.v("AndroidFragmentActivity", "onCreate()");
  Log.v("AndroidFragmentsavedInstanceState", savedInstanceState == null ? "true" : "false");

  setContentView(R.layout.activity_main);

  if(savedInstanceState == null) {
   android.app.FragmentTransaction ft = getFragmentManager().beginTransaction();
   ListFragment listFragment = new ListFragment();
   ft.add(R.id.displayList, listFragment, "List_Fragment");
   ft.setTransition(FragmentTransaction.TRANSIT_FRAGMENT_FADE);
   ft.commit();
  }

  if(findViewById(R.id.displayDetail) != null){
   detailPage = true;
   getFragmentManager().popBackStack();

   DetailFragment detailFragment = (DetailFragment) getFragmentManager().findFragmentById(R.id.displayDetail);
   if(detailFragment == null){
    android.app.FragmentTransaction ft = getFragmentManager().beginTransaction();
    detailFragment = new DetailFragment();
    ft.replace(R.id.displayDetail, detailFragment, "Detail_Fragment1");
    ft.setTransition(FragmentTransaction.TRANSIT_FRAGMENT_FADE);
    ft.commit();
   }
  }

 }


 public void onURLSelected(String URL) {
  Log.v("AndroidFragmentActivity",URL);

  if(detailPage){
   DetailFragment detailFragment = (DetailFragment)
   getFragmentManager().findFragmentById(R.id.displayDetail);
   detailFragment.updateURLContent(URL);
  }
  else{
   DetailFragment detailFragment = new DetailFragment();
   detailFragment.setURLContent(URL);
   android.app.FragmentTransaction ft = getFragmentManager().beginTransaction();
   ft.replace(R.id.displayList, detailFragment, "Detail_Fragment2");
   ft.setTransition(FragmentTransaction.TRANSIT_FRAGMENT_FADE);
   ft.addToBackStack(null);
   ft.commit();
  }
 }


  }

エラーは次のとおりです。

Fragment から DetailFragment にキャストできません

FragmentTransaction 型のメソッド add(int, Fragment, String) は、引数 (int, ListFragment, String) には適用されません。

FragmentTransaction 型のメソッド replace(int, Fragment, String) は、引数 (int, DetailFragment, String) には適用されません。

どうすればこの問題を解決できますか? ありがとう。

4

3 に答える 3

7

互換性フラグメントと通常の 3.0+フラグメントクラスを混同している可能性があります。

互換パッケージを使用する場合:

伸ばすAndroidFragmentActivity_FragmentActivity

変化する

android.app.FragmentTransaction ft = getFragmentManager().beginTransaction();

FragmentTransaction ft = getSupportFragmentManager().beginTransaction();

そして、すべての呼び出しgetFragmentManager()が代わりであることを確認してくださいgetSupportFragmentManager()

android.support.v4.app.FragmentFragments が から拡張されていることを確認してくださいandroid.app.Fragment

また

通常のフラグメントを使用したい場合は、すべてのsupport.v4インポートを取り除き、android.app.Fragment互換性のないフラグメントである でフラグメントが動作することを確認してください。

于 2013-01-31T16:56:38.767 に答える
0

サポート ライブラリ (v4) フラグメントとネイティブ フラグメントを混在させているようです。すべてのフラグメントと関連コンポーネントが v4 を使用していることを確認してください。たとえば、アクティビティはFragmentActivityではなく拡張する必要がありActivityます。ネイティブフラグメントではなく、v4 も使用していることListFragmentを確認してください。DetailFragment

于 2013-01-31T17:00:21.820 に答える
0

android.support.v4.app.* または android.app.* のいずれかで、互換性または通常のフラグメントを使用しているかどうかを確認する必要があります。

私は使用android.support.v4.app.* しています

FragmentManager fragmentManager = getSupportFragmentManager();
FragmentTransaction fragmentTransaction = fragmentManager.beginTransaction();

そして、それは私にとってうまくいきます..

于 2014-06-20T18:30:47.473 に答える