java.lang.IllegalStateException: представление содержимого еще не создано

"mMatchAdapter" инициализируется при onCreate, но имеет значение null в "setCursor", почему? Этот ListFragment является вкладкой tabHost, я использую его для отображения списка. Я хочу изменить адаптер в setCursor, чтобы отобразить другой список, но возникает ошибка в строке mMatchAdapter.changeCursor(c);, потому что mMatchAdapter имеет значение null, почему? когда getListView выше этой строки, будет

public class RecentsListFragment extends ListFragment implements onSetRecentsContactsCursor {
    public final static String TAG = "RecentsListFragment";
@Override
public void onViewCreated(View view, Bundle savedInstanceState) {
    // TODO Auto-generated method stub
    Log.d(TAG, "---------> onViewCreated ");
    mListView = getListView();
    Log.d(TAG, "onViewCreated------mListView = " + mListView);
    mViewCreated = true;
    setListShown(false);
    super.onViewCreated(view, savedInstanceState);
}

@Override
public void onDestroyView() {
    // TODO Auto-generated method stub
    Log.d(TAG, "---------> onDestroyView ");
    mViewCreated = false;
    super.onDestroyView();
}


@Override
public void onListItemClick(ListView l, View v, int pos, long id) {
    // TODO Auto-generated method stub
    Cursor cursor;
    ListAdapter adapter = getListAdapter();
    if (adapter == mLogsAdapter){
        cursor = (Cursor)mLogsAdapter.getItem(pos);
    }else if (adapter == mMatchAdapter){
        cursor = (Cursor)mMatchAdapter.getItem(pos);
    }
    super.onListItemClick(l, v, pos, id);
}


@Override
public void onAttach(Activity activity) {
    // TODO Auto-generated method stub
    Log.d(TAG, "------>onAttach");
    mActivity = activity;
    super.onAttach(activity);
}


@Override
public void onCreate(Bundle savedInstanceState) {
    // TODO Auto-generated method stub
    Log.d(TAG, "---------> onCreate ");

    mNumberQuery = NumberLocalQuery.getInstance(mActivity.getApplicationContext());
    mQueryHandler = new CursorQueryHandler(mActivity.getContentResolver());
    mPhotoLoader = new ContactPhotoLoader(mActivity);
    mLogsAdapter = new BBKRecentCallsAdapter(mActivity, mPhotoLoader, mNumberQuery);

    mMatchAdapter = new BBKDialerMatchListAdapter(mActivity, mPhotoLoader, mNumberQuery);
    super.onCreate(savedInstanceState);
}

@Override
public void onStart() {
    // TODO Auto-generated method stub
    mCallsChanged = true;
    Log.d(TAG, "---------> onStart ");
    setListAdapter(mLogsAdapter);
    mLogsAdapter.clearCache();
    startQuery();
    super.onStart();
}


@Override
public void onStop() {
    // TODO Auto-generated method stub
    mCallsChanged = false;
    Log.d(TAG, "---------> onStop ");

    if (null != mQueryHandler){
        mQueryHandler.cancelOperation(CUROSR_QUERY_TOKEN_CALLS);
    }
    super.onStop();
}


@Override
public void onResume() {
    // TODO Auto-generated method stub
    Log.d(TAG, "---------> onResume ");
    boolean is24Hour = DateFormat.is24HourFormat(mActivity);
    if (null != mLogsAdapter){
        mLogsAdapter.set24Hour(is24Hour);
    }
    if (null != mMatchAdapter){
        mMatchAdapter.set24Hour(is24Hour);
    }
    mIsMatching = false;
    super.onResume();
}


private void startQuery() {
    Log.d(TAG, "---------> startQuery ");
    if(mCallsChanged) {
        Log.d(TAG, "start query call_log database");
        mCallsChanged = false;
        mQueryHandler.cancelOperation(CUROSR_QUERY_TOKEN_CALLS);

        mQueryHandler.startQuery(CUROSR_QUERY_TOKEN_CALLS, null,
                Calls.CONTENT_URI, RecentCallsListActivity.CALL_LOG_PROJECTION, null,
                null, Calls.DEFAULT_SORT_ORDER);
    }else if(mLogsAdapter != null && (mLogsAdapter.getCursor() != null)) {
        mLogsAdapter.notifyDataSetChanged();
    }
}

@Override
public void onActivityCreated(Bundle savedInstanceState) {
    // TODO Auto-generated method stub
    Log.d(TAG, "---------> onActivityCreated ");
    super.onActivityCreated(savedInstanceState);
}

@Override
public void onDestroy() {
    // TODO Auto-generated method stub
    Log.d(TAG, "---------> onDestroy ");
    if (null != mLogsAdapter){
        mLogsAdapter.clearCache();
        mLogsAdapter.changeCursor(null);
    }
    if (null != mMatchAdapter){
        mMatchAdapter.changeCursor(null);
    }
    super.onDestroy();
}

@Override
public void onDetach() {
    // TODO Auto-generated method stub
    Log.d(TAG, "---------> onDetach ");
    super.onDetach();
}

@Override
public void setCursor(Cursor c) {
    // TODO Auto-generated method stub
    Log.d(TAG, "====setCursor======mViewCreated====" + mViewCreated);
    Log.d(TAG, "--------->mListView = " + mListView);
    if (null != c && c.getCount() > 0){
        setListAdapter(mMatchAdapter);
    }
    mMatchAdapter.changeCursor(c);
}
}

person zerotoone    schedule 10.05.2013    source источник
comment
нет ответа? Кто-нибудь сталкивался с таким же вопросом?   -  person zerotoone    schedule 13.05.2013
comment
На самом деле представление не создается, но почему это происходит? ListFragment имеет какую-то особенность?   -  person zerotoone    schedule 13.05.2013
comment
stackoverflow.com/ вопросы/12228842/   -  person Chrishan    schedule 08.02.2014