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

相关问题