gpt4 book ai didi

android - ListView 内容不会使用 SimpleCursorAdapter 显示,除非我单击/点击列表项

转载 作者:行者123 更新时间:2023-11-29 21:39:44 25 4
gpt4 key购买 nike

我在使用 SimpleCursorAdapter 填充 ListView 时遇到了一个奇怪的问题,下面给出了我的 ListFragment 源代码。

*问题:* 通过我的 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>

最佳答案

Fragment 已经有对 Context(使用 Activity 的地方)的引用,可以通过调用 检索>getActivity()。您应该使用该方法来初始化您的适配器实例。

与您的实现相关:

您应该避免像以前那样实现参数构造函数。这样做的原因是 Android 系统可能会在稍后尝试重新创建您的 fragment (在 ViewPager 中,在配置更改等之后)并且它将通过调用无参数构造函数(其中在您的情况下未实现)。您还将丢失传入的数据值。

你不需要传递Context,剩下的你可以传入一个Bundle作为参数:

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);

在 fragment 中你可以使用:

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

获取值。

关于android - ListView 内容不会使用 SimpleCursorAdapter 显示,除非我单击/点击列表项,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17500869/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com