在ListFragment中创建自定义ListView是不可能的

时间:2014-11-18 07:44:32

标签: 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;
    }

ERROR:

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)

EDITE: 我在这里移动了代码并且它工作了!!!

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

2 个答案:

答案 0 :(得分:3)

碎片和活动有不同的生命周期和回调。对于片段,onCreateView用于创建视图,它不会附加到视图层次结构,直到您返回v,因此您无法在其中调用getListView。只需创建并返回您的视图,如下所示。

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

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

答案 1 :(得分:1)

onCreateView中使用getListView()。请参阅getListView()返回onCreateView创建的视图。所以,你试图在onCreateView()返回之前使用它。因此错误'Content view is not yet created'.

尝试在v

中使用getListView()代替onCreateView()
((LoadMoreListView)v).setonLoadMoreListener(...);