Три фрагмента в моем приложении, Fragment1, Fragment2, Fragment3, отображают содержимое одной таблицы в виде списка, используя единственный пользовательский класс CursorAdapter, TaskCursorAdapter.Вот класс:
public class TaskCursorAdapter extends CursorAdapter {
public TaskCursorAdapter(Context context, Cursor c) {
super(context, c, 0 /* flags */);
}
@Override
public View newView(Context context, Cursor cursor, ViewGroup parent) {
return LayoutInflater.from(context).inflate(R.layout.list_item_task, parent, false);
}
@Override
public void bindView(View view, Context context, Cursor cursor) {
TextView titleTextView = (TextView) view.findViewById(R.id.task_title);
TextView detailsTextView = (TextView) view.findViewById(R.id.task_details);
int titleColumnIndex = cursor.getColumnIndex(TaskEntry.COLUMN_TASK_TITLE);
int detailsColumnIndex = cursor.getColumnIndex(TaskEntry.COLUMN_TASK_DETAILS);
String taskTitle = cursor.getString(titleColumnIndex);
String taskDetails = cursor.getString(detailsColumnIndex);
if (TextUtils.isEmpty(taskDetails)) {
taskDetails = context.getString(R.string.unknown_task);
}
titleTextView.setText(taskTitle);
detailsTextView.setText(taskDetails);
}
}
Таблица указана в классе контракта как TaskEntry.У этого также есть другой столбец с именем TaskEntry.COLUMN_TASK_STATUS = "status".Возможные значения: 0, 1 или 2. В настоящее время все элементы отображаются в обоих фрагментах.Но я хочу сделать так, чтобы во Fragment1 отображались только строки со статусом = 0, в Fragment2 - со статусом = 1, а во Fragment3 - со статусом = 2.
Я попробовал следующее в методе bindView:
int taskStatus = Integer.parseInt(cursor.getString(cursor.getColumnIndex(TaskEntry.COLUMN_TASK_STATUS)));
if(taskStatus==0) { //code in bindView }
Это привело к отображению только элементов со статусом = 0 во всех фрагментах, но оставило пустое завышенное представление вместо элемента со статусом, отличным от 0. Кроме того, я не могу найти способпередать информацию, чтобы сделать ее специфичной для Fragment1.
Как условно отобразить строки на основе значения состояния и фрагмента?
РЕДАКТИРОВАТЬ: Что сработало:
Вместо того, чтобы попробовать это в TaskCursorAdapter, я использовал условный запрос в методе onCreateLoader, как показано ниже в каждом фрагменте:
public Loader<Cursor> onCreateLoader(int id, Bundle args) {
String selectionArgs[] = {"<status>"};
String[] projection = {
TaskEntry._ID,
TaskEntry.COLUMN_TASK_TITLE,
TaskEntry.COLUMN_TASK_DETAILS};
return new CursorLoader(this.getActivity(), TaskEntry.CONTENT_URI, projection,
TaskEntry.COLUMN_TASK_STATUS + " = ?", selectionArgs, null);
}