【发布时间】:2014-07-28 01:57:42
【问题描述】:
我正在学习 Udacity 课程的第 4b 课,并且已经对 ForecastFragment.java 进行了所有更改以使用 Loader,但现在 MainActivity.java 中的构建失败了,即使我没有触及该文件。
即这部分有下划线,
.add(R.id.container, new ForecastFragment())
出现错误:
Error:(20, 21) error: no suitable method found for add(int,ForecastFragment) method FragmentTransaction.add(Fragment,String) is not applicable (argument mismatch; int cannot be converted to Fragment) method FragmentTransaction.add(int,Fragment) is not applicable (argument mismatch; ForecastFragment cannot be converted to Fragment)
这是 ForecastFragment 声明(以及相关导入,因为强调必须使用 v4 版本:)
import android.support.v4.app.Fragment;
import android.support.v4.app.LoaderManager.LoaderCallbacks;
public class ForecastFragment extends Fragment
implements LoaderCallbacks<Cursor> {
有趣的是,虽然我知道这是不正确的,但当我将 Fragment 导入更改为:
import android.app.Fragment;
MainActivity.java 中的错误消失了,然后是 ForecastFragment 无法编译,initLoader() 下划线和错误:
@Override
public void onActivityCreated(Bundle savedInstanceState) {
getLoaderManager().initLoader(FORECAST_LOADER, null, this);
super.onActivityCreated(savedInstanceState);
}
Error:(281, 27) error: method initLoader in class LoaderManager cannot be applied to given types; required: int,Bundle,LoaderCallbacks<D> found: int,<null>,ForecastFragment
原因:无法推断类型变量 D(参数不匹配;ForecastFragment 无法转换为 LoaderCallbacks)其中 D 是类型变量:D 扩展方法 initLoader(int,Bundle,LoaderCallbacks) 中声明的对象
这是完整的 MainActivity.java 文件:
public class MainActivity extends Activity {
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
if (savedInstanceState == null) {
getFragmentManager().beginTransaction()
.add(R.id.container, new ForecastFragment())
.commit();
}
}
我现在已经回到了从整个练习更改事物以使用 Loader 之前的还原点,以确保我没有错过任何东西,但我不知所措。有谁知道发生了什么?谢谢!
【问题讨论】:
标签: java android fragment loader