Android 片段无法解析添加方法
Android Fragment cannot resolve add method
我对 Android 开发有点陌生。我一直在看 Udemy 的视频,似乎有些代码已经过时,这会导致错误。当我尝试将我的 PlaceholderFragment 对象添加到交易时,它说 "Cannot resolve method add..",除此之外,在 else 语句中它说 "Incompatible types" 。但是 taskFragment 对象继承自 Fragment class 和 findFragmentByTag returns 片段类型。这是代码的结构。
这里我尝试使用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();
}
我有一个 class 扩展片段:
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 class 是这样的。 'L' 是一个自定义的 class,它记录消息并显示 toasts。我认为这无关紧要。
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:+'
}
我猜这是关于支持的版本class。如您所见,我的是 v7。这些怎么解决。感谢您的帮助!
@致谢 Md[=14=]
使用import android.support.v4.app.Fragment
代替import android.app.Fragment
android.support.v4.app.Fragment is the Fragment class in the android support library, which is a compatibility package that allows you to use some of the newer features of Android on older versions of Android.Reference
请将此添加到您的 gradle 依赖项中
compile 'com.android.support:support-v4:22.1.1'
我对 Android 开发有点陌生。我一直在看 Udemy 的视频,似乎有些代码已经过时,这会导致错误。当我尝试将我的 PlaceholderFragment 对象添加到交易时,它说 "Cannot resolve method add..",除此之外,在 else 语句中它说 "Incompatible types" 。但是 taskFragment 对象继承自 Fragment class 和 findFragmentByTag returns 片段类型。这是代码的结构。
这里我尝试使用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();
}
我有一个 class 扩展片段:
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 class 是这样的。 'L' 是一个自定义的 class,它记录消息并显示 toasts。我认为这无关紧要。
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:+'
}
我猜这是关于支持的版本class。如您所见,我的是 v7。这些怎么解决。感谢您的帮助!
@致谢 Md[=14=]
使用import android.support.v4.app.Fragment
代替import android.app.Fragment
android.support.v4.app.Fragment is the Fragment class in the android support library, which is a compatibility package that allows you to use some of the newer features of Android on older versions of Android.Reference
请将此添加到您的 gradle 依赖项中
compile 'com.android.support:support-v4:22.1.1'