web-dev-qa-db-fra.com

android - devez-vous jamais ajouter des fragments au manifeste

J'utilise un fragment censé afficher une vue Web. Lorsque j'essaie de l'instancier à partir de la classe qui l'utilise, j'obtiens l'avertissement suivant dans mon 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?

Je viens d'apprendre à utiliser des fragments et je n'ai jamais essayé de les déclarer dans mon manifeste et je n'ai vu nulle part vous le dire.

Voici la classe 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);
    }
}
}

EDIT: l'ajout de WebFrag en tant qu'activité au manifeste provoque l'erreur suivante

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

EDIT: Heres la principale fragmentactivity où Im essayant d'utiliser ma classe

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
James andresakis

Non, ne l'ajoutez pas à votre manifeste. Vous n'avez jamais besoin d'ajouter des fragments à votre manifeste.

Créez-vous une intention quelque part pour démarrer la WebActivity? Comment est-il porté à l'écran, c'est probablement là que réside votre problème.

[~ # ~] modifier [~ # ~]

Voici votre problème:

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

Vous ne pouvez pas démarrer un fragment en tant qu'activité, vous devrez envelopper le fragment dans une activité qui s'étend FragmentActivity

32
Blundell

si vous voulez revenir de l'activité au fragment, essayez ceci

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

// Remarque: vous devez donner un identifiant à la présentation principale de votre activité, par exemple: 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