アプリからのアクティビティに問題がありました。メソッドでいくつかのデータを保存しonSavedInstanceState()
て復元していましたonCreateView()
(このアクティビティには 2 つのフラグメントがあり、onCreate と onCreateView があります)。復元されたデータは修正されましたが、アクティビティからスピナーに正しく配置できませんでした。
このループの前、中、後にいくつかのブレークポイントを配置しました。
ArrayAdapter<String> adapter = new ArrayAdapter<String>(getActivity(), android.R.layout.simple_spinner_item, list);
spinner.setAdapter(adapter);
**if(savedInstanceState != null) {
Log.i("SPINNER POS", ""+posSaved);
spinner.setSelection(posSaved);
}**
そして、アプリがonCreateViewメソッドに2回アクセスすることを観察できました...最初はposSaved変数が正しいですが、2回目はこの変数が0であり、この理由により、スピナーはposSaved変数に保存された位置を常に表示しません(デフォルトのように)0の位置を示しており、onSavedInstanceStateメソッドを使用していないようです...
...なぜアプリは onCreateView() メソッドで 2 回入力するのですか? どうすればこの状況を解決できますか?
PD。このアクティビティも onCreate() メソッドに 2 回入ります。
マイ アクティビティ コード
public class Menu_Seeker_Filter extends Fragment {
... (variables declarated) ...
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
if ((getFragmentManager().findFragmentById(R.id.results_fragment) != null)) { //Fragments
mTwoPane = true;
}
@Override
public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) {
View view = inflater.inflate(R.layout.activity_seeker_filtro, container, false);
if (savedInstanceState != null) {
// Restore value of members from saved state
posSaved = savedInstanceState.getInt("POSITION");
}
...
ArrayAdapter<String> adapter = new ArrayAdapter<String>(getActivity(), android.R.layout.simple_spinner_item, list);
spinner.setAdapter(adapter);
spinner.setOnItemSelectedListener(new OnItemSelectedListener() {
public void onItemSelected(AdapterView<?> parent, View view, int pos, long id) {
((TextView) parent.getChildAt(0)).setTextSize(18);
((TextView) parent.getChildAt(0)).setTypeface(font2);
text = (parent.getItemAtPosition(pos).toString());
posSaved = pos;
}
public void onNothingSelected(AdapterView<?> parent) {
//Do nothing.
}
});
if(savedInstanceState != null) {
Log.i("POSITION", ""+posSaved);
spinner.setSelection(posSaved);
}
}
@Override
public void onSaveInstanceState(Bundle savedInstanceState) {
// Save the user's current game state
savedInstanceState.putInt("POSITION", spinner.getSelectedItemPosition());
// Always call the superclass so it can save the view hierarchy state
super.onSaveInstanceState(savedInstanceState);
}
}
このアクティビティ フラグメントは、このクラスで呼び出されます。
public class Menu_Seeker extends FragmentActivity {
...(variables declarated)...
final Menu_Seeker_Filter fragment = new Menu_Seeker_Filter();
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.fragment_seeker_filter);
if ((getSupportFragmentManager().findFragmentById(R.id.results_fragment) != null)) { //Fragments
mTwoPane = true;
getSupportFragmentManager().beginTransaction().replace(R.id.seeker_fragment, fragment).commit();
}else { //No Fragments
getSupportFragmentManager().beginTransaction().replace(R.id.framelayout_filter, fragment).commit();
}
...
}
ありがとう。