置き換えを使用してアクティビティに添付されたフラグメントは1つだけです。デバイスが数秒後に画面をロックしてロックを解除すると、フラグメントビュー(EditTextsなど)と選択されたスピンナーアイテムが同じままであっても、いくつかのスピナーに割り当てられたonItemSelectedメソッドが実行されます。ロックされた画面から戻るときにonItemSelectedが実行されるのを防ぐ方法
public class MyFragment extends Fragment {
private Spinner mySpinner;
public static MyFragment newInstance() {
return new MyFragment();
}
@Nullable
@Override
public View onCreateView(LayoutInflater inflater, @Nullable ViewGroup container, @Nullable Bundle savedInstanceState) {
View view = inflater.inflate(R.layout.some_layout, container, false);
mySpinner = (Spinner)view.findViewById(R.id.my_spinner);
List<String> items = new ArrayList<>();
items.add("Anything");
items.add("Anything");
items.add("Anything");
ArrayAdapter<String> adapter =
new ArrayAdapter<String>(
getContext(),
android.R.layout.simple_spinner_item,
items);
mySpinner.setAdapter(adapter);
mySpinner.setOnItemSelectedListener(new AdapterView.OnItemSelectedListener() {
@Override
public void onItemSelected(AdapterView<?> parent, View view, int position, long id) {
Toast.makeText(getContext(), "Hello World", Toast.LENGTH_LONG).show();
}
@Override
public void onNothingSelected(AdapterView<?> parent) {
}
});
return view;
}
@Override
public void onViewCreated(View view, @Nullable Bundle savedInstanceState) {
super.onViewCreated(view, savedInstanceState);
}
}
私はトーストメッセージ「Hello World」の(またはリスナーに割り当てられた任意の他の方法またはアクション)を取得する項目を選択するたびに、しかし、デバイスロックとは、私はロックを解除するとき、私はまだ取得していますメソッドはonItemSelectedメソッドが呼び出されたかのようにメッセージを返します。
ブーリアンとFragmentのonSaveInstanceStateメソッドとonActivityCreatedメソッドを使いこなそうとしていましたが、ロックされた画面からデバイスが戻ったときにonItemSelectedメソッドが実行されないようにする方法を見つけられませんでした。
を参照してください
mySpinner.setSelection(position, false)
前に置くことで、Spinner
が初期化された後にonItemSelected
が呼び出されるということですか?スピナーが最終的にトーストを発行することは望ましくありません。あなたは、後でそれを使用するためにいくつかの値を設定する可能性があります。例えば'myspinnerselecteditem = my.Spnner.getSecltedItem()'のようなことが起こるかもしれません。その場合、複数回設定されていても問題ありませんか? – MikeTはい、スピナーは、選択した項目によってアクションが異なりますが、ロックされた画面から戻ったときにonItemSelectedが実行されるという問題があります。 – FerDensetsu