1

ListViewusingにデータを入力しているときに奇妙な問題に直面しています。SimpleCursorAdapter私のソースコードをListFragment以下に示します。

*問題: * my を介してリストにデータを追加した後addEditTaskActivity(挿入に問題がないことをテストしました)、その内容がListView表示されません。しかし、リスト項目をクリック/タップすると、正しいデータが表示されます。

ここで何が間違っているのかわかりません。

TasksListFragment.java

public class CourseTaskListFragment extends SherlockListFragment implements
        LoaderCallbacks<Cursor>, OnItemClickListener {

private LoaderManager mLoaderManager;
private ListView mListView;
protected int dialogOkCancel;
protected long selectedTID;
private CursorLoader mCursorLoader;
private AsyncQueryHandler mAsyncQueryHandler;
private Cursor mCursor;
private Context context;
private long semesterID_FK;
private SimpleCursorAdapter mSimpleTaskListAdapter;

// ---------------------------------------------------------------------

public CourseTaskListFragment(Context context, long currentCourseId,
        long semesterID_FK) {
    super();
    this.currentCourseId = currentCourseId;
    this.semesterID_FK = semesterID_FK;
    this.context = context;
}

// ---------------------------------------------------------------------

@Override
public void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    Log.i(StudyManagerDataSource.LOG_TAG,
            "TaskListFragment onCreate called!");
    // Enable the option menu for the Fragment
    setHasOptionsMenu(true);

    setRetainInstance(true);


    mSimpleTaskListAdapter = new SimpleCursorAdapter(context,
            android.R.layout.simple_list_item_1, null,
            new String[] { Task.COL_NAME },
            new int[] { android.R.id.text1 },
            SimpleCursorAdapter.FLAG_REGISTER_CONTENT_OBSERVER);
    setListAdapter(mSimpleTaskListAdapter);

    mLoaderManager = getLoaderManager();
    mLoaderManager.initLoader(1, null, this);

} // end onCreate

// ---------------------------------------------------------------------
@Override
public View onCreateView(LayoutInflater inflater, ViewGroup container,
        Bundle savedInstanceState) {
    return inflater
            .inflate(R.layout.course_task_fragment, container, false);
}

// ---------------------------------------------------------------------

@Override
public void onActivityCreated(Bundle savedInstanceState) {
    super.onActivityCreated(savedInstanceState);
    mListView = getListView();
    mListView.setLongClickable(true);

    registerForContextMenu(mListView);

    mListView.setOnItemClickListener(this);
    mListView.setOnItemLongClickListener(this);
}

// -----------------------------------------------------------------

@Override
public Loader<Cursor> onCreateLoader(int arg0, Bundle arg1) {

    mCursorLoader = new CursorLoader(getActivity(), Task.CONTENT_URI,
            Task.allColumns, Task.COL_COURSE_ID_FK + " = ? and "
                    + Task.COL_SEMESTER_ID_FK + " = ? ", new String[] {
                    String.valueOf(currentCourseId),
                    String.valueOf(semesterID_FK) }, null);

    return mCursorLoader;
}

// -----------------------------------------------------------------

@Override
public void onLoadFinished(Loader<Cursor> arg0, Cursor cursor) {
    // TODO Auto-generated method stub
    if (mSimpleTaskListAdapter != null && cursor.moveToFirst()) {
        mSimpleTaskListAdapter.swapCursor(cursor);

    } else {

    }

}

// -----------------------------------------------------------------
@Override
public void onLoaderReset(Loader<Cursor> arg0) {
    if (mSimpleTaskListAdapter != null)
        mSimpleTaskListAdapter.swapCursor(null);

    }


}

私のレイアウトのソースコードは次のとおりです。

* course_task_fragment.xml*

    <?xml version="1.0" encoding="utf-8"?>
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:layout_width="wrap_content"
    android:layout_height="wrap_content"
    android:gravity="center_horizontal|center_vertical"
    android:orientation="vertical" >

    <ListView
        android:id="@android:id/list"
        android:layout_width="match_parent"
        android:layout_height="match_parent" >
    </ListView>

    <TextView
        android:id="@android:id/empty"
        style="@style/emptyListMessage"
        android:text="@string/no_homework" />

</RelativeLayout>
4

1 に答える 1

2

には、への呼び出しで取得できる (使用されている場所) へのFragment参照が既にあります。そのメソッドを使用して、アダプタ インスタンスを初期化する必要があります。ContextActivitygetActivity()

実装に関連するもの:

あなたのように引数コンストラクターを実装することは避けるべきです。この理由は、Android システムが後でフラグメントを再作成しようとする可能性があるためです (ViewPager構成変更後など)。また、渡したデータ値も失われます。

を渡す必要はありませんContext。残りはBundle引数としてa に渡すことができます。

Bundle args = new Bundle();
args.put("course_id", long currentCourseId);
args.put("semester", long semesterID_FK);
// pass this to the fragment instance instead of the constructor
CourseTaskListFragment fragment = new CourseTaskListFragment(); // your current constructor would be removed
fragment.setArguments(args);

フラグメントでは、次を使用できます。

getArguments().getLong("couser_id");
getArguments().getLong("semester");

値を取得します。

于 2013-07-06T08:52:17.883 に答える