0

我只有一個片段附加到使用replace的活動。當設備在幾秒鐘後鎖定屏幕,然後解鎖它時,即使片段視圖(EditTexts等)和微調器所選項目保持不變,分配給某個微調器的onItemSelected方法也會被執行。如何停止onItem從鎖定屏幕返回時被選中執行

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方法執行時,設備從鎖定屏幕返回。

+0

你有什麼打算?你不可能希望微調者最終發出祝酒詞。你可能會設置一些價值,然後才能使用。例如你可能會做一些像'myspinnerselecteditem = my.Spnner.getSecltedItem()'在這種情況下,它會被重複設置多次? – MikeT

+0

是的,微調器根據選定的項目執行不同的操作,但沒關係,因爲我的問題是onItemSelected從鎖定屏幕返回時執行。 – FerDensetsu

回答

0

的問題是,Spinner被初始化後onItemSelected叫,解決方法是把mySpinner.setSelection(position, false)mySpinner.setOnItemSelectedListenerthis

相關問題