CursorLoader и свой SimpleCursorAdapter

SQLite, Preferences, файлы, SD, Content Provider, XML, JSON
Закрыто
pavel163
Сообщения: 13
Зарегистрирован: 02 июл 2014, 23:06

CursorLoader и свой SimpleCursorAdapter

Сообщение pavel163 » 19 сен 2014, 11:52

Здравствуйте. Столкнулся с такой проблемой: Создал свой адаптер наследник от SimpleCursorAdapter и у меня перестал работать CursorLoader. А с SimpleCursorAdapter работает. Вот код моего адаптера:

Код: Выделить всё

class MyAdapter extends SimpleCursorAdapter{
        Context ctx;
        Cursor cursor;
        int layout;

        public MyAdapter(Context context, int layout, Cursor c, String[] from, int[] to, int flags) {
            super(context, layout, c, from, to, flags);
            this.ctx = context;
            this.cursor = c;
            this.layout = layout;
        }//MyAdapter

        @Override
        public View newView(Context context, Cursor c, ViewGroup parent) {
            LayoutInflater inflater = (LayoutInflater) context.getSystemService(context.LAYOUT_INFLATER_SERVICE);
            View view = inflater.inflate(layout, parent, false);
            return view;
        }

        @Override
        public void bindView(View view, Context context, Cursor c) {
            String name = cursor.getString(cursor.getColumnIndex("name"));
            int number = Integer.parseInt(cursor.getString(cursor.getColumnIndex("number")));
            TextView nameTV = (TextView) view.findViewById(R.id.tvText);
            TextView prTV = (TextView) view.findViewById(R.id.tv_progress_horizontal);
            ProgressBar pbHorizontal = (ProgressBar) view.findViewById(R.id.pb_horizontal);
            nameTV.setText(name);
            prTV.setText(number + "/20");
            pbHorizontal.setProgress(number);
        }
    }

razmus
Сообщения: 82
Зарегистрирован: 26 мар 2013, 10:47

Re: CursorLoader и свой SimpleCursorAdapter

Сообщение razmus » 19 сен 2014, 12:04

Код: Выделить всё

    public void onCreate(Bundle savedInstanceState) {
    ////
        scAdapter.setViewBinder(new MyViewBinder());
    ///
    }

    class MyViewBinder implements SimpleCursorAdapter.ViewBinder {
        @Override
        public boolean setViewValue(View view, Cursor c, int arg2) {
        return true;
        }
    }
А так не подойдет?

pavel163
Сообщения: 13
Зарегистрирован: 02 июл 2014, 23:06

Re: CursorLoader и свой SimpleCursorAdapter

Сообщение pavel163 » 19 сен 2014, 18:12

razmus писал(а):

Код: Выделить всё

    public void onCreate(Bundle savedInstanceState) {
    ////
        scAdapter.setViewBinder(new MyViewBinder());
    ///
    }

    class MyViewBinder implements SimpleCursorAdapter.ViewBinder {
        @Override
        public boolean setViewValue(View view, Cursor c, int arg2) {
        return true;
        }
    }
А так не подойдет?
Не подошло. Может я что-то не так делаю

Код: Выделить всё

public class MainActivity3 extends ActionBarActivity implements LoaderManager.LoaderCallbacks<Cursor> {

    DataBaseHelper myDbHelper;
    SQLiteDatabase mydb;
    SimpleCursorAdapter scAdapter;
    ListView lvData;


    @TargetApi(Build.VERSION_CODES.HONEYCOMB)
    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.main3);

        myDbHelper = new DataBaseHelper(this);
        try {
            myDbHelper.createDataBase();
        } catch (IOException e) {
            throw new Error("Unable to create database");
        }
        try {
            myDbHelper.openDataBase();
        } catch (SQLException e) {
            e.printStackTrace();
        }

        mydb = myDbHelper.getWritableDatabase();
        Cursor cursor = mydb.query("myKino1", null, null, null, null, null, null );
        String[] from = new String[] { "name", "number", "number" };
        int[] to = new int[] { R.id.tvText, R.id.tv_progress_horizontal, R.id.pb_horizontal};
        scAdapter = new MyAdapter(this, R.layout.item, cursor, from, to, 0);
        lvData = (ListView) findViewById(R.id.listView);
        lvData.setAdapter(scAdapter);
        //getLoaderManager().initLoader(0, null, this);
    }

    @Override
    public Loader<Cursor> onCreateLoader(int id, Bundle bnd) {
        return new MyCursorLoader(this, mydb);
    }

    @TargetApi(Build.VERSION_CODES.HONEYCOMB)
    @Override
    public void onLoadFinished(Loader<Cursor> loader, Cursor data) {
        scAdapter.swapCursor(data);
    }

    @Override
    public void onLoaderReset(Loader<Cursor> loader) {

    }


    @TargetApi(Build.VERSION_CODES.HONEYCOMB)
    static class MyCursorLoader extends CursorLoader {

        SQLiteDatabase db;

        public MyCursorLoader(Context context, SQLiteDatabase db) {
            super(context);
            this.db = db;
        }

        @Override
        public Cursor loadInBackground() {
            Cursor cursor = db.query("myKino1", null, null, null, null, null, null );
            return cursor;
        }

    }//MyCursorLoader

    class MyAdapter extends SimpleCursorAdapter{
        Context ctx;
        Cursor cursor;
        int layout;

        public MyAdapter(Context context, int layout, Cursor c, String[] from, int[] to, int flags) {
            super(context, layout, c, from, to, flags);
            this.ctx = context;
            this.cursor = c;
            this.layout = layout;
        }//MyAdapter

        @Override
        public View newView(Context context, Cursor c, ViewGroup parent) {
            LayoutInflater inflater = (LayoutInflater) context.getSystemService(context.LAYOUT_INFLATER_SERVICE);
            View view = inflater.inflate(layout, parent, false);
            return view;
        }

        @Override
        public void bindView(View view, Context context, Cursor c) {
            String name = cursor.getString(cursor.getColumnIndex("name"));
            int number = Integer.parseInt(cursor.getString(cursor.getColumnIndex("number")));
            TextView nameTV = (TextView) view.findViewById(R.id.tvText);
            TextView prTV = (TextView) view.findViewById(R.id.tv_progress_horizontal);
            ProgressBar pbHorizontal = (ProgressBar) view.findViewById(R.id.pb_horizontal);
            nameTV.setText(name);
            prTV.setText(number + "/20");
            pbHorizontal.setProgress(number);
        }
    }
}

Аватара пользователя
Foenix
Сообщения: 4201
Зарегистрирован: 20 окт 2012, 12:01

Re: CursorLoader и свой SimpleCursorAdapter

Сообщение Foenix » 19 сен 2014, 18:23

код не смотрела, некогда
но перегружать вообще-то нужно метод getView()
а почему не работает и что вообще не работает - это задача для гадалки
R.id.team

NullPointerException - что делать???
viewtopic.php?f=33&t=3899&p=28952#p28952
Где моя ошибка?
viewtopic.php?f=60&t=3198

pavel163
Сообщения: 13
Зарегистрирован: 02 июл 2014, 23:06

Re: CursorLoader и свой SimpleCursorAdapter

Сообщение pavel163 » 19 сен 2014, 19:43

Foenix писал(а):код не смотрела, некогда
но перегружать вообще-то нужно метод getView()
а почему не работает и что вообще не работает - это задача для гадалки
А разве у SimpleCursorAdapter есть метод getView()?

Аватара пользователя
Foenix
Сообщения: 4201
Зарегистрирован: 20 окт 2012, 12:01

Re: CursorLoader и свой SimpleCursorAdapter

Сообщение Foenix » 19 сен 2014, 21:46

pavel163 писал(а):
Foenix писал(а):код не смотрела, некогда
но перегружать вообще-то нужно метод getView()
а почему не работает и что вообще не работает - это задача для гадалки
А разве у SimpleCursorAdapter есть метод getView()?
а разве нет?
http://developer.android.com/reference/ ... apter.html
R.id.team

NullPointerException - что делать???
viewtopic.php?f=33&t=3899&p=28952#p28952
Где моя ошибка?
viewtopic.php?f=60&t=3198

pavel163
Сообщения: 13
Зарегистрирован: 02 июл 2014, 23:06

Re: CursorLoader и свой SimpleCursorAdapter

Сообщение pavel163 » 19 сен 2014, 22:46

что-то именно этого метода я не нашел. Можете вкратце описать что мне сделать? И почему не работает именно когда я пытаюсь сделать асинхронное получение данных из БД? Спасибо

pavel163
Сообщения: 13
Зарегистрирован: 02 июл 2014, 23:06

Re: CursorLoader и свой SimpleCursorAdapter

Сообщение pavel163 » 21 сен 2014, 20:39

Исправил свою ошибку тем, что создал свой ViewBinder и присвоил его адаптеру. И не надо было переопределять SimpleCurserAdapter

Закрыто