这个问题已经在这里有了答案:




9年前关闭。






有谁知道如何在实例化布局时阻止onItemSelected()(OnItemSelectedListener接口(interface))方法运行?我需要知道是否有办法做到这一点,因为我想保持实例化布局的方式与此监听器分开。

我尝试过创建一个if语句,该语句最初在被覆盖的方法内部的所有代码周围都设置为false,但是无法知道何时将其设置为true,因为被覆盖的方法在onCreate(),onStart()和每次都使用onResume()方法。

我还没有找到任何明确的答案。任何明确的解决方案将不胜感激。

最佳答案

大卫,这是我为这个问题写的教程。

问题陈述

画廊(或微调器)正在初始化时,触发了不良的onItemSelected()。
这意味着代码会过早执行;仅在用户实际进行选择时才执行的代码。

解决方案

在onCreate()中的

  • 中,计算 View 中有多少个Gallery(或Spinner)小部件。 (mGalleryCount)
  • onItemSelected()中的
  • ,计算它触发的频率。 (mGalleryInitializedCount)
  • 当(mGalleryInitializedCount 的代码

    代码示例
    public class myActivity extends Activity implements OnItemSelectedListener
    {
        //this counts how many Gallery's are on the UI
        private int mGalleryCount=0;
    
        //this counts how many Gallery's have been initialized
        private int mGalleryInitializedCount=0;
    
        //UI reference
        private Gallery mGallery;
    
    
        @Override
        public void onCreate(Bundle savedInstanceState)
        {
    
            super.onCreate(savedInstanceState);
            setContentView(R.layout.myxmllayout);
    
            //get references to UI components
            mGallery = (Gallery) findViewById(R.id.mygallery);
    
            //trap selection events from gallery
            mGallery.setOnItemSelectedListener(this);
    
            //trap only selection when no flinging is taking place
            mGallery.setCallbackDuringFling(false);
    
            //
            //do other stuff like load images, setAdapter(), etc
            //
    
            //define how many Gallery's are in this view
            //note: this could be counted dynamically if you are programmatically creating the view
            mGalleryCount=1;
    
        }
    
    
        public void onItemSelected(AdapterView<?> parent, View view, int position, long id)
        {
    
            if (mGalleryInitializedCount < mGalleryCount)
            {
                mGalleryInitializedCount++;
            }
            else
            {
                //only detect selection events that are not done whilst initializing
                Log.i(TAG, "selected item position = " + String.valueOf(position) );
            }
    
        }
    
    }
    

    为什么有效

    该解决方案之所以有效,是因为Gallery在用户实际能够进行选择之前就完成了初始化。

    关于java - 微调器onItemSelected()执行不当,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/5624825/

  • 10-11 01:48
    查看更多