Я бы хотел использовать свой собственный класс CursorAdapter для заполнения ListFragment.Курсор возвращается из моего класса API БД.Я не использую ContentProvider.Курсор загружен правильно, и ListFragment.getListAdapter (). GetCount () возвращает количество элементов из курсора.
В пользовательском интерфейсе просто нет списка, отображаемого ...
Это мой класс ListFragment:
public class ArticlesListFragment extends ListFragmen
public ArticlesListFragment(int userId, ArticleType type, DBAdapter db) {
ArticlesListFragment.userId = userId;
this.type = type;
this.dbAdapter = db;
Log.d(TAG, "Constructor: type=" + type);
}
@Override
public void onActivityCreated(Bundle savedInstanceState) {
super.onActivityCreated(savedInstanceState);
setHasOptionsMenu(true);
mInflater = LayoutInflater.from(getActivity());
cursor = dbAdapter.getArticles(userId, type);
mAdapter = new ListAdapter(getActivity(), cursor, true);
setListAdapter(mAdapter);
//-----> When I call getListAdapter().getCount() here I get a proper number of articles.
}
}
А это ListAdapter ::
public class ListAdapter extends CursorAdapter {
private Context mContext;
private final LayoutInflater mInflater;
public ListAdapter(Context context, Cursor c, boolean autoRequery) {
super(context, c, autoRequery);
mInflater = LayoutInflater.from(context);
mContext = context;
}
@Override
public void bindView(View view, Context context, Cursor cursor) {
TextView title = (TextView) view.findViewById(R.id.article_title);
title.setText(cursor.getString(cursor
.getColumnIndex(Column._TITLE.name)));
TextView text = (TextView) view.findViewById(R.id.article_text);
text.setText(cursor.getString(cursor
.getColumnIndex(Column._TEXT.name)));
TextView date = (TextView) view.findViewById(R.id.article_date);
date.setText(cursor.getString(cursor
.getColumnIndex(Column._CREATED_DATE.name)));
}
@Override
public View newView(Context context, Cursor cursor, ViewGroup parent) {
final View view = mInflater.inflate(R.layout.articles_list_item,
parent, false);
return view;
}
@Override
public View getView(int position, View convertView, ViewGroup parent) {
if (!mDataValid) {
throw new IllegalStateException(
"this should only be called when the cursor is valid");
}
if (!mCursor.moveToPosition(position)) {
throw new IllegalStateException(
"couldn't move cursor to position " + position);
}
View v;
if (convertView == null) {
v = newView(mContext, getCursor(), parent);
} else {
v = convertView;
}
bindView(v, mContext, getCursor());
return v;
}
}
Спасибо
РЕДАКТИРОВАТЬ:
public class ArticlesFragment extends Fragment implements OnTabChangeListener {
@Override
public void onAttach(Activity activity) {
super.onAttach(activity);
dbAdapter = new DBAdapter(activity);
dbAdapter.open();
}
@Override
public View onCreateView(LayoutInflater inflater, ViewGroup container,
Bundle savedInstanceState) {
mRoot = inflater.inflate(R.layout.articles_tabs_fragment, null);
return mRoot;
}
@Override
public void onActivityCreated(Bundle savedInstanceState) {
super.onActivityCreated(savedInstanceState);
setRetainInstance(true);
FragmentManager fm = getFragmentManager();
if (fm.findFragmentByTag(tabId) == null) {
fm.beginTransaction()
.replace(placeholder,
new ArticlesListFragment(userId, ArticleType
.valueOf(tabId), dbAdapter)).commit();
}
}
Это полный файл макета R.layout.articles_tabs_fragment
.
<LinearLayout
android:layout_width="match_parent"
android:layout_height="match_parent"
android:orientation="vertical" >
<TabWidget
android:id="@android:id/tabs"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_weight="0"
android:orientation="horizontal" />
<FrameLayout
android:id="@android:id/tabcontent"
android:layout_width="0dp"
android:layout_height="0dp"
android:layout_weight="0" >
<FrameLayout
android:id="@+id/starredArticles"
android:layout_width="fill_parent"
android:layout_height="fill_parent" />
<FrameLayout
android:id="@+id/newArticles"
android:layout_width="fill_parent"
android:layout_height="fill_parent" />
<FrameLayout
android:id="@+id/readArticles"
android:layout_width="fill_parent"
android:layout_height="fill_parent" />
</FrameLayout>
</LinearLayout>
Это мой список элементов списка.При отладке я замечаю, что метод getView () CursorAdapter никогда не вызывается ..
<LinearLayout
android:id="@+id/first_row"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_marginBottom="3dp" >
<TextView
android:id="@+id/article_title"
android:layout_width="fill_parent"
android:layout_height="wrap_content"
android:layout_weight="1"
android:ellipsize="middle"
android:paddingRight="5dp"
android:singleLine="true"
android:textAppearance="?android:attr/textAppearanceLarge" />
<TextView
android:id="@+id/article_date"
android:layout_width="wrap_content"
android:layout_height="match_parent"
android:gravity="center_vertical"
android:textSize="10dp" />
</LinearLayout>
<TextView
android:id="@+id/article_text"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_below="@id/first_row"
android:layout_span="2"
android:textAppearance="?android:attr/textAppearanceSmall" />