gpt4 book ai didi

java - 在某些条件下撤消微调器选择

转载 作者:太空宇宙 更新时间:2023-11-04 12:54:09 25 4
gpt4 key购买 nike

也许是一个奇怪的问题。我有两个微调器,它们都适应同一个列表中的值。最初,我将它们设置为不同的位置。我需要它们始终不同,即用户永远无法在第一个 Spinner 中选择已在第二个中选择的 String ,反之亦然。我能想到的最简单的方法是:

 spinner1.setOnItemSelectedListener(new AdapterView.OnItemSelectedListener() {
@Override
public void onItemSelected(AdapterView<?> parent, View view,
int position, long id) {
if (position == spinner2.getSelectedItemPosition()){
//UNDO OR CANCEL THE SELECTION SOMEHOW
}

}

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

}
});

问题是如何撤消对前一个微调器的选择?是否可以不保留全局变量?谢谢

最佳答案

您可以使用堆栈来实现此目的:

Stack<Integer> stack = new Stack<>();
boolean programaticalyChange = false;
@Override
protected void onCreate(Bundle savedInstanceState) {
//Here initialize all you need
spinner.setOnItemSelectedListener(new AdapterView.OnItemSelectedListener() {
@Override
public void onItemSelected(AdapterView<?> parent, View view, int position, long id) {
if (programaticalyChange) {
programaticalyChange = false;
} else {
stack.push(position);
}
}

@Override
public void onNothingSelected(AdapterView<?> parent) {}
});
//I use button to pop stack back, but you can use any callback from second spinner
btn.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
programaticalyChange = true;
if (queue.isEmpty()) {
//no backstack available
sp.setSelection(0);
} else {
if (queue.peek() == sp.getSelectedItemPosition()) queue.pop();
sp.setSelection(queue.pop());
}
}
});
}

关于java - 在某些条件下撤消微调器选择,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/35550639/

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