Этот вопрос относится к разработке Android с помощью Android Studio с Java.
У меня проблемы с получением getLoaderManager для принятия контекста "this" при вызове ListViewLoader (расширяет ListActivity, реализует LoaderManager.LoaderCallbacks).
Я в основном копирую и вставляю код по этой ссылке: https://developer.android.com/guide/topics/ui/layout/listview#java. Я читаю ответ здесь ( getLoaderManager (). InitLoader () не принимает 'this' в качестве аргументахотя класс (ListFragment) реализует LoaderManager.LoaderCallbacks ).Я пытался убедиться, что мой импорт был правильным, и мой минимальный SDK составляет 15, так что это не должно быть проблемой.Я пытался использовать getSupportLoaderManager и Android Studio не может решить эту проблему.Я не совсем понимаю, что означает ответ в отношении фрагментов.Тем не менее, я не должен думать, что мне нужно, когда я копирую код из официальной документации.
Ошибка, которую я получаю при сборке, выглядит следующим образом:
error: method initLoader in class LoaderManager cannot be applied to given types;
required: int,Bundle,LoaderCallbacks<D>
found: int,<null>,ListViewLoader
reason: cannot infer type-variable(s) D
(argument mismatch; ListViewLoader cannot be converted to LoaderCallbacks<D>)
where D is a type-variable:
D extends Object declared in method <D>initLoader(int,Bundle,LoaderCallbacks<D>)
Я попытался форсировать тип-трансляцию, но это просто привело к аналогичным ошибкам во время выполнения (как и ожидалось).
См.весь код ниже, что мне не хватает.
package com.example.tracker2;
import android.app.ActionBar;
import android.app.ListActivity;
import android.database.Cursor;
import android.os.Bundle;
import android.provider.BaseColumns;
import android.support.v4.app.LoaderManager;
import android.support.v4.content.CursorLoader;
import android.support.v4.content.Loader;
import android.view.Gravity;
import android.view.View;
import android.view.ViewGroup;
import android.widget.ListView;
import android.widget.ProgressBar;
import android.widget.SimpleCursorAdapter;
public class ListViewLoader extends ListActivity implements LoaderManager.LoaderCallbacks<Cursor> {
SimpleCursorAdapter mAdapter;
String[] projection = {
BaseColumns._ID,
PriceListContract.PriceList.COLUMN1_NAME_TITLE,
PriceListContract.PriceList.COLUMN2_NAME_TITLE
};
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
ProgressBar progressBar = new ProgressBar(this);
progressBar.setLayoutParams(new ActionBar.LayoutParams(ActionBar.LayoutParams.WRAP_CONTENT,
ActionBar.LayoutParams.WRAP_CONTENT, Gravity.CENTER));
progressBar.setIndeterminate(true);
getListView().setEmptyView(progressBar);
ViewGroup root = (ViewGroup) findViewById(android.R.id.content);
root.addView(progressBar);
String[] fromColumns = {PriceListContract.PriceList.COLUMN1_NAME_TITLE, PriceListContract.PriceList.COLUMN2_NAME_TITLE};
int[] toViews = {android.R.id.text1, android.R.id.text2}; // The TextView in simple_list_item_1
mAdapter = new SimpleCursorAdapter(this,
android.R.layout.simple_list_item_2, null,
fromColumns, toViews, 0);
setListAdapter(mAdapter);
// !!This following line is the issue!!
getLoaderManager().initLoader(0, null, this);
}
public Loader<Cursor> onCreateLoader(int id, Bundle args) {
return new CursorLoader(this, PriceListContract.PriceList.CONTENT_URI,
projection, null , null, null);
}
public void onLoadFinished(Loader<Cursor> loader, Cursor data) {
mAdapter.swapCursor(data);
}
public void onLoaderReset(Loader<Cursor> loader) {
mAdapter.swapCursor(null);
}
@Override
public void onListItemClick(ListView l, View v, int position, long id) {
}
}