Страница 1 из 1
CursorLoader и свой SimpleCursorAdapter
Добавлено: 19 сен 2014, 11:52
pavel163
Здравствуйте. Столкнулся с такой проблемой: Создал свой адаптер наследник от 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);
}
}
Re: CursorLoader и свой SimpleCursorAdapter
Добавлено: 19 сен 2014, 12:04
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;
}
}
А так не подойдет?
Re: CursorLoader и свой SimpleCursorAdapter
Добавлено: 19 сен 2014, 18:12
pavel163
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);
}
}
}
Re: CursorLoader и свой SimpleCursorAdapter
Добавлено: 19 сен 2014, 18:23
Foenix
код не смотрела, некогда
но перегружать вообще-то нужно метод getView()
а почему не работает и что вообще не работает - это задача для гадалки
Re: CursorLoader и свой SimpleCursorAdapter
Добавлено: 19 сен 2014, 19:43
pavel163
Foenix писал(а):код не смотрела, некогда
но перегружать вообще-то нужно метод getView()
а почему не работает и что вообще не работает - это задача для гадалки
А разве у SimpleCursorAdapter есть метод getView()?
Re: CursorLoader и свой SimpleCursorAdapter
Добавлено: 19 сен 2014, 21:46
Foenix
pavel163 писал(а):Foenix писал(а):код не смотрела, некогда
но перегружать вообще-то нужно метод getView()
а почему не работает и что вообще не работает - это задача для гадалки
А разве у SimpleCursorAdapter есть метод getView()?
а разве нет?
http://developer.android.com/reference/ ... apter.html
Re: CursorLoader и свой SimpleCursorAdapter
Добавлено: 19 сен 2014, 22:46
pavel163
что-то именно этого метода я не нашел. Можете вкратце описать что мне сделать? И почему не работает именно когда я пытаюсь сделать асинхронное получение данных из БД? Спасибо
Re: CursorLoader и свой SimpleCursorAdapter
Добавлено: 21 сен 2014, 20:39
pavel163
Исправил свою ошибку тем, что создал свой ViewBinder и присвоил его адаптеру. И не надо было переопределять SimpleCurserAdapter