У меня была эта проблема в течение некоторого времени, и у меня пока нет ответа. У меня есть этот пользовательский адаптер курсора, который я использую для заполнения списка из базы данных sqlite. Теперь моя проблема в том, что я хочу заполнить список на основе определенных условий. Например, если условие имеет важное значение, listview должен отображать только данные, которые соответствуют этим критериям и т. Д. У меня уже есть методы работы, которые соответствующим образом обрабатывают базу данных.Странное поведение с пользовательским адаптером курсора android
теперь моя проблема заключается в том, что я не могу показаться, чтобы заполнить ListViews на основе этих методов и условий без:
1) создает копию точно такой же адаптер пользовательского курсора, а просто изменить переменные имена. 2) создание копии точного формата xml и изменение идентификатора.
Как я уже сказал, он работает таким образом, но я чувствую, что у меня есть ненужные классы и макет xml, так как он точно такой же. Я знаю, что я делаю что-то неправильно, я просто не знаю, что. Пожалуйста, любая помощь и объяснение будут оценены. здесь есть необходимая часть кода Кодекса для CustomCursorAdapter:
public class ViewItems extends ListActivity implements OnItemClickListener{
DBAdapter adapter;
Cursor cursor;
ListView list;
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.view_list);
adapter = new DBAdapter(this);
adapter.open();
fillData();
list = (ListView)findViewById(android.R.id.list); // default android listView id
list.setOnItemClickListener(this);
}
// Different method calls
protected void fillImportantData() {
Cursor cursor = adapter.retrieveImportant();
startManagingCursor(cursor);
String[] from = new String[]{DBAdapter.NAME, DBAdapter.DATE, DBAdapter.TIME, DBAdapter.PRIORITY};
int[] to = new int[]{R.id.viewNameId, R.id.viewDateId, R.id.viewTimeId};
customCursorAdapter items = new customCursorAdapter(this, R.layout.view_items, cursor, from, to);
setListAdapter(items);
}
public class customCursorAdapter extends SimpleCursorAdapter {
private int layout;
Context context;
public customCursorAdapter(Context context, int layout, Cursor cursor, String[]from, int[] to) {
super(context, layout, cursor, from, to);
this.layout = layout;
this.context = context;
}
@Override
public void bindView(View view, Context context, Cursor cursor) {
ViewHolder holder;
if(view != null){
holder = new ViewHolder();
holder.viewName = (TextView)view.findViewById(R.id.viewNameId);
holder.viewStartDate = (TextView)view.findViewById(R.id.viewDateId);
holder.viewStartTime = (TextView)view.findViewById(R.id.viewTimeId);
view.setTag(holder);
}else{
holder = (ViewHolder)view.getTag();
}
int namecol = cursor.getColumnIndex(DBAdapter.NAME);
String name = cursor.getString(namecol);
if(holder.viewName != null){
holder.viewName.setText(name);
holder.viewName.setTextColor(Color.RED);
}
String startDate = cursor.getString(cursor.getColumnIndex(DBAdapter.DATE));
holder.viewStartDate.setText(startDate);
String startTime = cursor.getString(cursor.getColumnIndex(DBAdapter.TIME));
holder.viewStartTime.setText(startTime);
}
@Override
public View newView(Context context, Cursor cursor, ViewGroup parent) {
LayoutInflater inflater = LayoutInflater.from(context);
final View view = inflater.inflate(layout, parent, false);
return view;
}
@Override
public long getItemId(int id){
return id;
}
@Override
public Object getItem(int position){
return position;
}
}
static class ViewHolder{
TextView viewName;
TextView viewStartDate;
TextView viewStartTime;
}
}
// methods in database
public Cursor retrieveAll(){
String[] resultColumns = new String[] {KEY_ID, NAME DATE, TIME, PRIORITY};
Cursor cursor = db.query(DATABASE_TABLE, resultColumns, null, , null, null, null);
return cursor;
}
public Cursor retrieveImportant(){
String[] resultColumns = new String[] {KEY_ID, NAME DATE, TIME, PRIORITY};
String[] condition = {"important"};
Cursor cursor = db.query(DATABASE_TABLE, resultColumns, PRIORITY + "=" + "?", condition, null, null, null);
return cursor;
}
спасибо за ответ, я просто показал вам код для моего адаптера адаптера, поэтому у вас будет представление о том, как оно было выложено. Я не изменяю макет строки, я использую точно то же самое. как вы сказали, я дам ваше предложение попробовать и дам вам знать, как это работает. – irobotxxx
Извините, где я могу вызвать метод changeCursor(). для этого, похоже, не существует метода. Я редактировал свой код, чтобы показать вам методы в базе данных. как вы можете видеть, они называют одно и то же. – irobotxxx
@manuelJ: 'changeCursor()' - это метод в 'CursorAdapter'. – CommonsWare