それがフラグメントに関する私の最後の問題であることを願っています:)
2 つのフラグメント (1 つは通常のリスト、もう 1 つはリスト) があり、main_activity で setContentView を実行すると、通常のフラグメントの onCreate が呼び出されているのに、ListFragment onCreate が呼び出されていないことがわかります。
ListFragment で onAttach + onDetach をオーバーライドしなかったことを除いて、どちらもほとんど同じです (通常のコールバックに対して行われました)。私が上書きしたのは、onCreate、onCreateView、onActivityCreated、onStart (asynctask を開始するため)、onSaveInstanceState です。
問題点を教えてください。ListFragment の fragmentManager で NullPointerEception を取得するためです。
いくつかのコード:
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);
}
リストフラグメント:
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:
mynews D/dalvikvm﹕ +++ アクティブなプロファイラー数 1 04-19 23:16:24.391 11473-11473/com.kfir.bs.mynews.mynews E/MoreInfoHPW_ViewGroup﹕ 親ビューは TextView ではありません 04-19 23:16 :27.771 11473-12572/com.kfir.bs.mynews.mynews I/dalvikvm﹕ threadid=11: メソッド トレースが終了するのを待っています 04-19 23:16:48.961 11473-11473/com.kfir.bs.mynews.mynews E/MyNews﹕ Exceptionjava.lang.NullPointerException 04-19 23:17:15.451 11473-11479/com.kfir.bs.mynews.mynews D/dalvikvm﹕ +++ アクティブなプロファイラー数 0 04-19 23:17:15.711 11473-11479/com.kfir.bs.mynews.mynews I/dalvikvm﹕ TRACE STOPPED: 書き込み 44458 レコード 04-19 23:17:15.711 11473-11479/com.kfir.bs.mynews.mynews W/dalvikvm﹕ 警告:デバッガーがアクティブです。メソッド トレースの結果は歪められます mynews E/MoreInfoHPW_ViewGroup﹕ 親ビューは TextView ではありません 04-19 23:16:27.771 11473-12572/com.kfir.bs.mynews.mynews I/dalvikvm﹕ threadid=11: メソッド トレースが終了するのを待っています 04-19 23 :16:48.961 11473-11473/com.kfir.bs.mynews.mynews E/MyNews﹕ Exceptionjava.lang.NullPointerException 04-19 23:17:15.451 11473-11479/com.kfir.bs.mynews.mynews D/dalvikvm ﹕ +++ アクティブなプロファイラー数 0 04-19 23:17:15.711 11473-11479/com.kfir.bs.mynews.mynews I/dalvikvm﹕ TRACE STOPPED: 44458 レコードの書き込み 04-19 23:17:15.711 11473- 11479/com.kfir.bs.mynews.mynews W/dalvikvm﹕ 警告: デバッガーがアクティブです。メソッド トレースの結果は歪められます mynews E/MoreInfoHPW_ViewGroup﹕ 親ビューは TextView ではありません 04-19 23:16:27.771 11473-12572/com.kfir.bs.mynews.mynews I/dalvikvm﹕ threadid=11: メソッド トレースが終了するのを待っています 04-19 23 :16:48.961 11473-11473/com.kfir.bs.mynews.mynews E/MyNews﹕ Exceptionjava.lang.NullPointerException 04-19 23:17:15.451 11473-11479/com.kfir.bs.mynews.mynews D/dalvikvm ﹕ +++ アクティブなプロファイラー数 0 04-19 23:17:15.711 11473-11479/com.kfir.bs.mynews.mynews I/dalvikvm﹕ TRACE STOPPED: 44458 レコードの書き込み 04-19 23:17:15.711 11473- 11479/com.kfir.bs.mynews.mynews W/dalvikvm﹕ 警告: デバッガーがアクティブです。メソッド トレースの結果は歪められます kfir.bs.mynews.mynews E/MyNews﹕ Exceptionjava.lang.NullPointerException 04-19 23:17:15.451 11473-11479/com.kfir.bs.mynews.mynews D/dalvikvm﹕ +++ アクティブなプロファイラー数 0 04 -19 23:17:15.711 11473-11479/com.kfir.bs.mynews.mynews I/dalvikvm﹕ トレース停止: 44458 レコードの書き込み 04-19 23:17:15.711 11473-11479/com.kfir.bs.mynews. mynews W/dalvikvm﹕ 警告: デバッガーがアクティブです。メソッド トレースの結果は歪められます kfir.bs.mynews.mynews E/MyNews﹕ Exceptionjava.lang.NullPointerException 04-19 23:17:15.451 11473-11479/com.kfir.bs.mynews.mynews D/dalvikvm﹕ +++ アクティブなプロファイラー数 0 04 -19 23:17:15.711 11473-11479/com.kfir.bs.mynews.mynews I/dalvikvm﹕ トレース停止: 44458 レコードの書き込み 04-19 23:17:15.711 11473-11479/com.kfir.bs.mynews. mynews W/dalvikvm﹕ 警告: デバッガーがアクティブです。メソッド トレースの結果は歪められます
よろしくお願いします、K