【问题标题】:Udacity Sunshine android app - make ForecastFragment implement LoaderCallbacks - won't compileUdacity Sunshine android 应用程序 - 使 ForecastFragment 实现 LoaderCallbacks - 不会编译
【发布时间】: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


    【解决方案1】:

    如果你想使用android.support.v4.app.Fragment,你需要使用FragmentActivity(或者ActionBarActivity,如果你想要一个向后兼容的Action Bar)和getSupportFragmentManager(),如果你想使用android.support.v4.app.Fragment

    当然,另一种选择是使用不支持的 v4 版本的 FragmentLoaderManager

    【讨论】:

    • 谢谢,但你能详细说明我需要改变什么吗?谢谢!
    • 是否要使用支持库版本?如果没有,那么您应该能够删除这两个导入并将它们替换为不支持的库版本(即android.app.Fragmentandroid.app.LoaderManager.LoaderCallbacks)。
    • 我必须使用支持库。我的类声明或实例化有问题吗?啊!谢谢
    • 啊,那更简单 - 将 MainActivity extends Activity 替换为 MainActivity extends FragmentActivity
    • 你也像我的回答说的那样切换到getSupportFragmentManager()getSupportLoaderManager()
    猜你喜欢
    • 2016-06-05
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-11-01
    相关资源
    最近更新 更多