web-dev-qa-db-ja.com

android-マニフェストにフラグメントを追加する必要がありますか

私はウェブビューを表示することになっているフラグメントを使用しています。それを使用するクラスからインスタンス化しようとすると、logcatに次の警告が表示されます。

02-21 23:26:46.843: W/System.err(32468): Android.content.ActivityNotFoundException: Unable   to find explicit activity class {get.scanner/get.scanner.WebFrag}; have you declared this activity in your AndroidManifest.xml?

私はフラグメントの使用方法を学んでいるだけで、マニフェストでフラグメントを宣言しようとしたことは一度もありません。

HeresはWebFragクラスです。

public class WebFrag extends Fragment{
private WebView viewer = null;

// if we weren't just using the compat library, we could use WebViewFragment

@Override
public View onCreateView(LayoutInflater inflater, ViewGroup container,
        Bundle savedInstanceState) {
    viewer = (WebView) inflater
            .inflate(R.layout.webview, container, false);
    WebSettings settings = viewer.getSettings();
    settings.setJavaScriptEnabled(true);
    settings.setDefaultZoom(ZoomDensity.FAR);

    return viewer;
 }

 @Override
 public void onPause() {
   if (viewer != null) {
       viewer.onPause();
   }
   super.onPause();
 }

 @Override
 public void onResume() {
    super.onResume();
    if (viewer != null) {
        viewer.onResume();
    }
 }

 public void updateUrl(String newUrl) {
    if (viewer != null) {
        viewer.loadUrl(newUrl);
    }
}
}

編集:WebFragをアクティビティとしてマニフェストに追加すると、次のエラーが発生します

02-22 00:17:55.711: E/AndroidRuntime(2524): Java.lang.RuntimeException: Unable to instantiate activity ComponentInfo{get.scanner/get.scanner.WebFrag}: Java.lang.ClassCastException: get.scanner.WebFrag

編集:イムが私のクラスを使用しようとしている主要なフラグメントアクティビティをここに示します

public class GetScannerActivity extends FragmentActivity {

private String mUrl = "http://www.yahoo.com/";

Button scanButton;
Button Paint;
Button compTrans;
String yurl = "http://www.yahoo.com/";

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

    compTrans = (Button) findViewById(R.id.checkCurrentDeals);
    compTrans.setOnClickListener(new OnClickListener(){

        @Override
        public void onClick(View arg0) {
            // TODO Auto-generated method stub
    WebFrag viewer = (WebFrag) getSupportFragmentManager()
            .findFragmentById(R.id.web_frag);

    try{
    if (viewer == null || !viewer.isInLayout()) {
        Intent showContent = new Intent(getApplicationContext(),
                WebFrag.class);
        showContent.setData(Uri.parse(yurl));
        try{
        startActivity(showContent);
        }catch(ActivityNotFoundException e){
            e.printStackTrace();
        }
    } else {
        viewer.updateUrl(yurl);
    }   
    }catch(Exception e){
        e.printStackTrace();
    }


    }
    });
 }
}
20

いいえ、マニフェストに追加しないでください。マニフェストにフラグメントを追加する必要はありません。

WebActivityを開始するインテントをどこかに作成しますか?それはどのように画面に表示されますか、それはおそらくあなたの問題がある場所です。

[〜#〜]編集[〜#〜]

これはあなたの問題です:

 Intent showContent = new Intent(getApplicationContext(),
            WebFrag.class);
 startActivity(showContent);

フラグメントをアクティビティとして開始することはできません。フラグメントを拡張するアクティビティにラップする必要があります FragmentActivity

32
Blundell

アクティビティからフラグメントに戻りたい場合は、これを試してください

proToolbar.setNavigationOnClickListener(new View.OnClickListener() {
        @Override
        public void onClick(View view) {

//注:アクティビティのメインレイアウトにIDを指定する必要があります。例:searchVehicles

            ((ConstraintLayout) findViewById(R.id.searchVehicles)).removeAllViews();
            FragmentManager fragmentManager = getSupportFragmentManager();
            FragmentTransaction fragmentTransaction = fragmentManager.beginTransaction();
            fragment_nearby_vehicles fnv = new fragment_nearby_vehicles();
            fragmentTransaction.add(R.id.searchVehicles, fnv).commit();
        }
    });
0
Jatin