заполнить ListFragment элементами Cursor без ContentProvider - PullRequest
0 голосов
/ 30 марта 2012

Я бы хотел использовать свой собственный класс 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" />

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...