2012-02-22 2 views
18

Im utilisant un fragment censé afficher un webview. Lorsque j'essaie de l'instancier depuis la classe qui l'utilise, j'obtiens l'avertissement suivant dans mon logcat.android - devez-vous ajouter des fragments au manifeste?

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? 

Im juste apprendre à utiliser des fragments et Ive jamais essayé de les déclarer dans mon manifeste et je nai pas vu où vous dire de le faire.

Hérite de 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: ajouter WebFrag comme une 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 le principal 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(); 
    } 


    } 
    }); 
} 
} 

Répondre

29

Aucun don Ne l'ajoutez pas à votre manifeste. Vous n'avez jamais besoin d'ajouter des fragments à votre manifeste.

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

EDIT

Ceci est votre problème:

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

Vous ne pouvez pas commencer un fragment comme une activité, vous aurez à envelopper le fragment dans une activité qui s'étend FragmentActivity

+0

Ouais j'étais assez sûr que vous ne faites pas ça. Je poste mon autre classe où je pensais l'utiliser. –

+0

En encapsulant le fragment, voulez-vous dire créer une fragmentation qui étend ma classe WebFrag? –

+1

Non, vous devez créer une 'WebActivity' qui étend FragmentActivity. Ensuite, dans la mise en page xml pour WebActivity, vous ajoutez votre fragment, c'est-à-dire Blundell

Questions connexes