1

Je suis un peu nouveau sur le développement Android. J'ai regardé des vidéos d'Udemy et il semble que certains codes soient obsolètes, ce qui entraîne des erreurs. Lorsque je tente d'ajouter mon objet PlaceholderFragment à la transaction, il est dit « ne peut pas résoudre la méthode add .. », en plus de cela, à l'instruction else il dit « Types incompatibles » .Cependant l'taskFragment objet hérite d' à partir de la classe Fragment et findFragmentByTag renvoie Fragment. Voici la structure du code.Fragment Android ne peut pas résoudre la méthode d'ajout

Ici j'essaie d'utiliser la méthode getSupportFragmentManager pour commencer la transaction.

@Override 
    protected void onCreate(Bundle savedInstanceState) { 
    super.onCreate(savedInstanceState); 
    setContentView(R.layout.activity_main); 
    if (savedInstanceState == null) { 
     taskFragment = new PlaceholderFragment(); 
     getSupportFragmentManager().beginTransaction().add(taskFragment, "MyFragment").commit(); 

    } else { 
     taskFragment = getSupportFragmentManager().findFragmentByTag("MyFragment"); 
    } 
    taskFragment.startTask(); 
} 

J'ai une classe qui étend Fragment:

public static class PlaceholderFragment extends Fragment { 

    TechCrunchTask downloadTask; 

    public PlaceholderFragment() { 
    } 

    @Override 
    public void onActivityCreated(Bundle savedInstanceState) { 
     super.onActivityCreated(savedInstanceState); 
     setRetainInstance(true); 
    } 

    public void startTask() { 
     if (downloadTask != null) 
      downloadTask.cancel(true); 
     else { 
      downloadTask = new TechCrunchTask(); 
      downloadTask.execute(); 
     } 
    } 

} 

classe TechCrunchTask est comme ça. 'L' est une classe personnalisée qui enregistre les messages et affiche les toasts. C'est hors de propos, je suppose.

public static class TechCrunchTask extends AsyncTask<Void, Void, Void> { 
    @Override 
    protected Void doInBackground(Void... params) { 
     String downloadURL = "http://http://feeds.feedburner.com/techcrunch/android?format=xml"; 
     try { 
      URL url = new URL(downloadURL); 
      HttpURLConnection connection = (HttpURLConnection) url.openConnection(); 
      connection.setRequestMethod("GET"); 
      InputStream inputStream = connection.getInputStream(); 
      ProcessXML(inputStream); 
     } catch (Exception e) { 
      L.m(e + ""); 
     } 
    } 

C'est la méthode ProcessXML:

public void ProcessXML(InputStream inputStream) throws Exception { 
     DocumentBuilderFactory documentBuilderFactory = DocumentBuilderFactory.newInstance(); 
     DocumentBuilder documentBuilder = documentBuilderFactory.newDocumentBuilder(); 
     Document xmlDocument = documentBuilder.parse(inputStream); 
     Element rootElement = xmlDocument.getDocumentElement(); 
     L.m("" + rootElement.getTagName()); 

    } 

Voici la liste des paquets importés:

import android.app.Activity; 
import android.app.Fragment; 
import android.os.AsyncTask; 
import android.os.Bundle; 
import android.support.v4.app.FragmentActivity; 
import android.support.v7.app.ActionBarActivity; 
import android.support.v7.app.AppCompatActivity; 
import android.view.Menu; 
import android.view.MenuItem; 

import org.w3c.dom.Document; 
import org.w3c.dom.Element; 
import org.xml.sax.Parser; 
import org.xml.sax.SAXException; 

import java.io.IOException; 
import java.io.InputStream; 
import java.lang.annotation.ElementType; 
import java.net.HttpURLConnection; 
import java.net.MalformedURLException; 
import java.net.URL; 

import javax.xml.parsers.DocumentBuilder; 
import javax.xml.parsers.DocumentBuilderFactory; 
import javax.xml.parsers.ParserConfigurationException; 

Et cela est à l'intérieur du build.gradle

dependencies { 
compile fileTree(dir: 'libs', include: ['*.jar']) 
compile 'com.android.support:appcompat-v7:+' 
} 

Je suppose que c'est à propos de la ver sion de la classe de soutien. Le mien est v7 comme vous le voyez. Comment ceux-ci peuvent être résolus. Merci pour l'aide!

+2

essayer de changer 'android.app.Fragment d'importation,' 'à l'importation android.support.v4.app.Fragment,' 'dans votre Fragment' –

Répondre

1

@Courtesy MD

utilisation import android.support.v4.app.Fragment au lieu import android.app.Fragment

android.support.v4.app.Fragment est la classe Fragment dans la bibliothèque de support Android, qui est un package de compatibilité qui vous permet d'utiliser quelques-unes des nouvelles fonctionnalités d'Android sur plus versions d'Android. Reference

S'il vous plaît ajouter dans vos dépendances Gradle

compile 'com.android.support:support-v4:22.1.1' 
+2

Ajoutez aussi 'compile 'com.android.support: support-v4: 22.1.1'' dans' dependency' –

+1

@MD Oui oui .Notes observations .Cheers –