私は2つのフラグメントを持っています。インターフェイスを使用して、あるフラグメントを別のフラグメントと通信しています。
public class FragmentLanguages extends ListFragment {
LanguageArrayAdapter adapter;
OnLanguageChangedListener mCallback;
public interface OnLanguageChangedListener {
public void onLanguageSelected(int position);
}
@Override
public View onCreateView(LayoutInflater inflater, ViewGroup container,
Bundle savedInstanceState) {
View view = inflater.inflate(R.layout.languages, null);
return view;
}
@Override
public void onActivityCreated(Bundle savedInstanceState) {
super.onActivityCreated(savedInstanceState);
Language languages[] = new Language[] {
new Language(R.drawable.ic_flag_german, "German"),
new Language(R.drawable.ic_flag_spanish, "Spanish"),
new Language(R.drawable.ic_flag_russian, "Russian"),
new Language(R.drawable.ic_flag_ukrainian, "Ukrainian") };
adapter = new LanguageArrayAdapter(getActivity(), R.layout.list_row,
languages);
getListView().setOnItemClickListener(new OnItemClickListener() {
@Override
public void onItemClick(AdapterView<?> parent, View view,
int position, long id) {
adapter.setSelectedItem(position);
mCallback.onLanguageSelected(position + 1);
}
});
setListAdapter(adapter);
}
public static class Language {
public int image;
public String text;
public Language() {
super();
}
public Language(int image, String text) {
super();
this.image = image;
this.text = text;
}
}
public void setOnLanguageChangedListener(OnLanguageChangedListener mCallback) {
this.mCallback = mCallback;
}
}
そしてもう一つ
public class FragmentCircles extends Fragment implements OnClickListener,
OnLanguageChangedListener { ...
.....
@Override
public void onLanguageSelected(int position) {
currentLang = position;
translationCircle.removeAllViews();
String strSelect = "SELECT Translation FROM Translation WHERE Lang_Id="
+ currentLang + " ORDER BY Word_Id ASC";
translationList = DataBaseHelper.getInstance(getActivity())
.SelectTranslationList(strSelect);
Log.i("Lang ", "changed " + currentLang);
calculateCentreTranslation(lLabelRadius, width, height);
}
しかし、ListFragment でアイテムを選択すると画面が回転した後、エラーが発生します
12-07 19:06:15.163: E/AndroidRuntime(436): java.lang.NullPointerException
行で
mCallback.onLanguageSelected(position + 1);
mCallback が null のようです。しかし、どうすれば修正できますか?