我们经常会遇到listview或者其他view设置setOnItemSelectedListener监听时,一加载界面,setOnItemSelectedListener监听就会自动执行一遍,导致你第一次移动上去的时候setOnItemSelectedListener监听就不会走的
所以我们采用自定义listview,主动来调用setOnItemSelectedListener监听回调,代码如下
public class MyListView extends ListView { private int lastPosition = 0; public MyListView(Context context) { super(context); } public MyListView(Context context, AttributeSet attrs) { super(context, attrs); } public MyListView(Context context, AttributeSet attrs, int defStyleAttr) { super(context, attrs, defStyleAttr); } // 一个 item 选中的时候,总是会触发 setSelection 方法 // 所以在这个方法中,我们记录并检查上一次的selection position 就行了,如果是相同的,手动调用监听即可 @Override public void setSelection(int position) { super.setSelection(position); if (position == lastPosition){ getOnItemSelectedListener().onItemSelected(this,getSelectedView,position,0);
} lastPosition = position; } }