getLoaderManager не принимает контекст ListViewLoader, реализующего LoaderManger.LoaderCallbacks <Cursor> - PullRequest
0 голосов
/ 09 февраля 2019

Этот вопрос относится к разработке 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) {
    }
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...