【问题标题】:Android Fragment cannot resolve add methodAndroid Fragment 无法解析添加方法
【发布时间】:2015-08-17 11:15:11
【问题描述】:

我对 Android 开发有点陌生。我一直在看 Udemy 的视频,似乎有些代码已经过时,这会导致错误。当我尝试将我的 PlaceholderFragment 对象添加到事务时,它说 “无法解析方法添加..”,除此之外,在 else 语句中它说 “不兼容的类型”.但是 taskFragment 对象是从 Fragment 类继承的,findFragmentByTag 返回 Fragment 类型。这是代码的结构。

这里我尝试使用 getSupportFragmentManager 方法开始事务。

 @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();
}

我有一个扩展 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();
        }
    }

}

TechCrunchTask 类是这样的。 'L' 是一个自定义类,它记录消息并显示祝酒词。我认为这无关紧要。

 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 + "");
        }
    }

这是 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());

    }

这里是导入包的列表:

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;

这就是 build.gradle 的内部

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

我猜这是关于支持类的版本。如您所见,我的是v7。如何解决这些问题。感谢您的帮助!

【问题讨论】:

  • 尝试将您的Fragment 中的import android.app.Fragment; 更改为import android.support.v4.app.Fragment;

标签: android android-fragments android-support-library fragmentmanager


【解决方案1】:

@Courtesy To Md

使用import android.support.v4.app.Fragment 代替import android.app.Fragment

android.support.v4.app.Fragment是android支持库中的Fragment类,它是一个兼容包,可以让你在旧版本的Android上使用Android的一些较新的功能。Reference

请将此添加到您的 gradle 依赖项中

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

【讨论】:

  • dependency中添加compile 'com.android.support:support-v4:22.1.1'
  • @MD 是的。很好的观察。干杯
猜你喜欢
  • 2015-02-10
  • 2021-03-28
  • 2022-07-20
  • 1970-01-01
  • 1970-01-01
  • 2014-01-30
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多