android - 无法在 ListFragment 中创建自定义 ListView

标签 android android-listfragment

我导入了库 [1]:https://github.com/shontauro/android-pulltorefresh-and-loadmore

示例类正在扩展 ListActivity 并且一切正常。 我重做了 extends ListFragment,但出现错误。

 public class SurveyGuestsList extends ListFragment {

    @Override
    public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) {
        View v = inflater.inflate(R.layout.loadmore, null);

        arrayList = new ArrayList<SurveyGuestsListBean>();
        context = getActivity();
        new LoadDataTask().execute();

//        set a listener to be invoked when the list reaches the end
        ((LoadMoreListView) getListView())
                .setOnLoadMoreListener(new OnLoadMoreListener() {
                    public void onLoadMore() {
                        // Do the work to load more items at the end of list
                        // here
                        new LoadDataTask().execute();
                    }
                });
        return v;
    }

错误:

11-18 07:34:10.508    1777-1777/com.example.MANAGMENT E/AndroidRuntime﹕ FATAL EXCEPTION: main
    java.lang.IllegalStateException: Content view not yet created
            at android.support.v4.app.ListFragment.ensureList(ListFragment.java:328)
            at android.support.v4.app.ListFragment.getListView(ListFragment.java:222)
            at com.example.MANAGMENT.fragments.SurveyGuestsList.onCreateView(SurveyGuestsList.java:50)
            at android.support.v4.app.Fragment.performCreateView(Fragment.java:1786)
            at android.support.v4.app.FragmentManagerImpl.moveToState(FragmentManager.java:947)
            at android.support.v4.app.FragmentManagerImpl.moveToState(FragmentManager.java:1126)
            at android.support.v4.app.BackStackRecord.run(BackStackRecord.java:739)
            at android.support.v4.app.FragmentManagerImpl.execPendingActions(FragmentManager.java:1489)
            at android.support.v4.app.FragmentManagerImpl$1.run(FragmentManager.java:454)
            at android.os.Handler.handleCallback(Handler.java:587)
            at android.os.Handler.dispatchMessage(Handler.java:92)
            at android.os.Looper.loop(Looper.java:123)
            at android.app.ActivityThread.main(ActivityThread.java:3683)
            at java.lang.reflect.Method.invokeNative(Native Method)
            at java.lang.reflect.Method.invoke(Method.java:507)
            at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:839)
            at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:597)
            at dalvik.system.NativeStart.main(Native Method)

编辑: 我把代码移到了这里,它起作用了!!!

@Override
    public void onViewCreated(View view, Bundle savedInstanceState) {
        ((LoadMoreListView) getListView())
                .setOnLoadMoreListener(new OnLoadMoreListener() {
                    public void onLoadMore() {
                        // Do the work to load more items at the end of list here
                        new LoadDataTask().execute();
                    }
                });
        super.onViewCreated(view, savedInstanceState);
    }

最佳答案

fragment 和 Activity 有不同的生命周期和回调。对于 fragment ,onCreateView 用于创建 View ,直到您返回 v 才附加到 View 层次结构,因此您不能在其中调用 getListView。只需按如下方式创建并返回您的 View 。

  @Override
  public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) {
    View v = inflater.inflate(R.layout.loadmore, null);
    return v;
  }

将其余代码移至 onViewCreated()或稍后的回调。

关于android - 无法在 ListFragment 中创建自定义 ListView,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26989058/

相关文章:

java - 在 gradle.properties 文件中使用 'android.debug.obsoleteApi=true' 时如何访问日志错误详细信息

android - 在 android 中开启回话时,字符串被读取为数字而不是逐位读取

Android 可扩展 ListView fragment

android - 无法从 fragment 中获取父 View

android - 当我想返回到上一个 fragment 时,后退按钮不起作用

android - Gradle下载的自动链接源码

java - 如何在 3D 应用程序中定义和标准化单位?

android - 以编程方式展开 ShareAction Provider MenuItem 的子菜单

android - 每行带有按钮的 ListFragment

android - 使用 LoaderManager 和 CursorLoader 在 ListView 中显示专辑和艺术家