XML で定義された 2 ペイン ビューがあります。xlarge の場合、ビューの左側は、コンテンツの選択を処理する Fragment です。このセレクターを初期化ListFragment
して、アプリの起動時に最初の項目が強調表示されるようにします。
私はListFragment
これを行うためのメソッドを書きました:
public void setSelectedItem (int position) {
//Unselect the previous item
if(mPreviousPosition != ListView.INVALID_POSITION) {
View oldSelected = getListView().getChildAt(mPreviousPosition);
oldSelected.setBackgroundResource(R.drawable.menu_button);
((ImageView) oldSelected.findViewById(R.id.selector_icon)).setImageDrawable(icons.getDrawable(mPreviousPosition));
((TextView) oldSelected.findViewById(R.id.selector_text)).setTextAppearance(getActivity(), R.style.text_selector);
}
//Select this item
View newSelected = getListView().getChildAt(position);
newSelected.setBackgroundResource(R.drawable.menu_button_active);
((ImageView) newSelected.findViewById(R.id.selector_icon)).setImageDrawable(icons_active.getDrawable(position));
((TextView) newSelected.findViewById(R.id.selector_text)).setTextAppearance(getActivity(), R.style.text_selector_active);
mPreviousPosition = position;
}
アイテムが選択された後にこれを呼び出すと、うまく機能します。しかし、起動時に最初の項目を強調表示しようとすると、NPE が発生します。
newSelected.setBackgroundResource(R.drawable.menu_button_active);
フラグメントのビューがまだ作成されていないため、getListView().getChildAt(position)
戻ってきているようです。null
それで、私のアクティビティのどこから初期化を試みても安全ListFragment
ですか?onStart、onRestoreInstanceState、および onResume で試しましたが、すべて NPE が生成されます。