gpt4 book ai didi

选择相同项目时,android 微调器触发事件

转载 作者:塔克拉玛干 更新时间:2023-11-01 21:51:59 26 4
gpt4 key购买 nike

我想在微调器中选择相同的项目时触发一个事件。方法

@Override
public void onItemSelected(AdapterView<?> parent, View arg1, int position,
long arg3) {
}

仅在我们做出不同选择时调用。我的目的是在选择任何项目时显示 toast ,或者重新选择相同的项目或做出不同的选择。

@Override
public void onNothingSelected(AdapterView<?> parent) {

}

以上方法没有解决我的问题。

最佳答案

我发现旧选择保存在微调器层次结构中名为 mOldSelectedPosition 的变量中。 Spinner 使用此值检查是否选择了相同的项目,如果相同,则忽略。如果我们不想忽略这个我所做的是一些使用反射的脏代码。

package com.aradiom.amc.nativecomponents;

import java.lang.reflect.Field;

import android.content.Context;
import android.util.Log;
import android.widget.Spinner;

public class SpinnerTrigger extends Spinner {

public SpinnerTrigger(Context context) {
super(context);
// TODO Auto-generated constructor stub
}

@Override
public void setSelection(int position, boolean animate) {
ignoreOldSelectionByReflection();
super.setSelection(position, animate);
}

private void ignoreOldSelectionByReflection() {
try {
Class<?> c = this.getClass().getSuperclass().getSuperclass().getSuperclass();
Field reqField = c.getDeclaredField("mOldSelectedPosition");
reqField.setAccessible(true);
reqField.setInt(this, -1);
} catch (Exception e) {
Log.d("Exception Private", "ex", e);
// TODO: handle exception
}
}

@Override
public void setSelection(int position) {
ignoreOldSelectionByReflection();
super.setSelection(position);
}

}

此类将始终使旧选择值无效,因此每次点击事件都会被触发。它可能不是完美的解决方案。谨慎使用。 :)

关于选择相同项目时,android 微调器触发事件,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8937150/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com