这个问题已经在这里有了答案:
9年前关闭。
有谁知道如何在实例化布局时阻止onItemSelected()(OnItemSelectedListener接口(interface))方法运行?我需要知道是否有办法做到这一点,因为我想保持实例化布局的方式与此监听器分开。
我尝试过创建一个if语句,该语句最初在被覆盖的方法内部的所有代码周围都设置为false,但是无法知道何时将其设置为true,因为被覆盖的方法在onCreate(),onStart()和每次都使用onResume()方法。
我还没有找到任何明确的答案。任何明确的解决方案将不胜感激。
最佳答案
大卫,这是我为这个问题写的教程。
问题陈述
画廊(或微调器)正在初始化时,触发了不良的onItemSelected()。
这意味着代码会过早执行;仅在用户实际进行选择时才执行的代码。
解决方案
在onCreate()中的
代码示例
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/