【发布时间】:2019-10-29 10:56:42
【问题描述】:
我正在尝试在ProfileFragment Fragment 中显示用户数据。
所以我实现了LoaderManager.LoaderCallbacks<Cursor>
但出现以下错误:
CursorLoader cannot be converted to Loader<Cursor>
我该如何解决?
我在 Google 上进行了搜索,但找不到适合我的问题的正确解决方案。 有什么解决办法吗?
提前致谢。
ProfileFragment.java
package com.example.takeattendence;
import android.content.Context;
import android.content.CursorLoader;
import android.database.Cursor;
import android.os.Bundle;
import android.provider.BaseColumns;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;
import android.widget.CursorAdapter;
import android.widget.ListView;
import androidx.annotation.NonNull;
import androidx.annotation.Nullable;
import androidx.fragment.app.Fragment;
import androidx.fragment.app.FragmentManager;
import androidx.loader.app.LoaderManager;
import androidx.loader.content.Loader;
import com.example.takeattendence.database.LoginContract;
public class ProfileFragment extends Fragment implements LoaderManager.LoaderCallbacks<Cursor>
{
private static final int PET_LOADER = 0;
LoginCursorAdapter mLoginCursorAdapter;
@Override
public View onCreateView(@NonNull LayoutInflater inflater, @Nullable ViewGroup container, @Nullable Bundle savedInstanceState)
{
View view = inflater.inflate(R.layout.fragment_profile,container,false);
ListView listView = view.findViewById(R.id.profile_list);
mLoginCursorAdapter = new LoginCursorAdapter(getActivity(),null);
listView.setAdapter(mLoginCursorAdapter);
getLoaderManager().initLoader(PET_LOADER,null,this);
return view;
}
@NonNull
@Override
public Loader<Cursor> onCreateLoader(int id, @Nullable Bundle args) {
String[] projection = {
BaseColumns._ID,
LoginContract.LoginEntry.COLUMN_FIRST_NAME,
LoginContract.LoginEntry.COLUMN_PHONE_NUMBER,
LoginContract.LoginEntry.COLUMN_EMAIL_ID,
LoginContract.LoginEntry.COLUMN_PASSWORD,
LoginContract.LoginEntry.COLUMN_POST,
LoginContract.LoginEntry.COLUMN_GENDER
};
//error occurs at this line
return new CursorLoader(getContext(),
LoginContract.LoginEntry.CONTENT_URI,
projection,
null,
null,
null);
return null;
}
@Override
public void onLoadFinished(@NonNull Loader<Cursor> loader, Cursor data) {
mLoginCursorAdapter.swapCursor(data);
}
@Override
public void onLoaderReset(@NonNull Loader<Cursor> loader) {
mLoginCursorAdapter.swapCursor(null);
}
}
【问题讨论】:
-
您正在使用
androidx.loader.content.Loader,它不是android.content.CursorLoader的超类。您必须使用 androidx 的CursorLoader: developer.android.com/reference/androidx/loader/content/… 版本才能使它们兼容 -
好的,那我可以用什么?
-
You have to use androidx's version of CursorLoader -
你会写吗?
-
尝试导入
androidx.loader.content.CursorLoader而不是android.content.CursorLoader
标签: android android-loadermanager