Надеюсь, это моя последняя проблема с фрагментами :)
У меня есть два фрагмента (один обычный, другой список), и когда я запускаю setContentView для main_activity, я замечаю, что вызывается onCreate обычного фрагмента, с другой стороны, ListFragment onCreate не вызывается.
Оба они почти одинаковы, за исключением того, что я не переопределял onAttach + onDetach в ListFragment (это было сделано для обратных вызовов в обычном). Я перезаписал: onCreate, onCreateView, onActivityCreated, onStart (для запуска асинхронной задачи), onSaveInstanceState.
Можете ли вы сказать мне, в чем проблема? так как я получаю NullPointerEception в менеджере фрагментов для ListFragment.
Некоторый код:
activity_main.xml:
<android.support.v4.widget.DrawerLayout
xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:tools="http://schemas.android.com/tools"
android:id="@+id/drawer_layout"
android:layout_width="match_parent"
android:layout_height="match_parent"
tools:context="com.mynews.mynews.MainActivity">
<FrameLayout
android:id="@+id/container"
android:layout_width="match_parent"
android:layout_height="match_parent" />
<fragment android:id="@+id/navigation_drawer"
android:layout_width="@dimen/navigation_drawer_width"
android:layout_height="match_parent"
android:layout_gravity="start"
android:name="com.mynews.mynews.NavigationDrawerFragment"
tools:layout="@layout/fragment_navigation_drawer" />
<fragment android:id="@+id/rss_feed"
android:layout_width="@dimen/navigation_drawer_width"
android:layout_height="match_parent"
android:layout_gravity="end"
android:name="com.kfir.bs.mynews.mynews.NewsFeed"
tools:layout="@layout/fragment_news_feed" />
</android.support.v4.widget.DrawerLayout>
Об активности:
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
try {
setContentView(R.layout.activity_main);
mNavigationDrawerFragment = (NavigationDrawerFragment)
getFragmentManager().findFragmentById(R.id.navigation_drawer);
mNewsFeed = (NewsFeed) getFragmentManager().findFragmentById(R.id.rss_feed);
На фрагменте:
public class NavigationDrawerFragment extends Fragment {
private static final String STATE_SELECTED_POSITION = "selected_navigation_drawer_position";
private static final String PREF_USER_LEARNED_DRAWER = "navigation_drawer_learned";
private NavigationDrawerCallbacks mCallbacks;
private ActionBarDrawerToggle mDrawerToggle;
private DrawerLayout mDrawerLayout;
private ListAdapter adapter;
private ListView mDrawerListView;
private View mFragmentContainerView;
private int mCurrentSelectedPosition = 0;
private boolean mFromSavedInstanceState;
private boolean mUserLearnedDrawer;
public NavigationDrawerFragment() {
}
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
SharedPreferences sp = PreferenceManager.getDefaultSharedPreferences(getActivity());
mUserLearnedDrawer = sp.getBoolean(PREF_USER_LEARNED_DRAWER, false);
if (savedInstanceState != null) {
mCurrentSelectedPosition = savedInstanceState.getInt(STATE_SELECTED_POSITION);
mFromSavedInstanceState = true;
}
adapter = new ListAdapter(getActionBar().getThemedContext(), generateData());
selectItem(mCurrentSelectedPosition);
}
В ListFragment:
public class NewsFeed extends ListFragment
{
private static final String STATE_SELECTED_POSITION = "selected_navigation_drawer_position";
View feedView;
ListAdapterFeed rssListAdapter;
private int mCurrentSelectedPosition = 0;
private boolean mFromSavedInstanceState;
public NewsFeed() {
}
@Override
public void onAttach(Activity activity) {
super.onAttach(activity);
}
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
SharedPreferences sp = PreferenceManager.getDefaultSharedPreferences(getActivity());
if (savedInstanceState != null) {
mCurrentSelectedPosition = savedInstanceState.getInt(STATE_SELECTED_POSITION);
mFromSavedInstanceState = true;
}
StrictMode.ThreadPolicy policy = new StrictMode.ThreadPolicy.Builder().permitAll().build();
StrictMode.setThreadPolicy(policy);
}
Добавление трассировки стека:
https://www.dropbox.com/s/dxrz0925u3nfmgp/ddms7983186720865326533.trace
Логкат:
Заранее спасибо, К.
Просто отсутствует logcat.