我需要一种方法来知道首先按下了哪个按钮。应用的布局或多或少是这样的:
Button1 Button2
Button3 Button4
Button5 Button6
Button7 Button8
Button9 Button10
Button11 Button12
如果按下“行”按钮之一,则另一个按钮消失。问题是,我不知道如何知道这12个按钮中的哪个按钮先被按下,然后被按下,然后再按下第三,依此类推...
我用于隐藏按钮的代码效果很好,但这很简单。
//*[text()='target_text']//parent::div
我进行了搜索,但也许我不知道要搜索什么,也没有找到好的答案。
答案 0 :(得分:1)
您可以这样做: 1)有一个HashMap,您可以在同一行上将两个按钮相互链接。 2)有一个按钮ID的ArrayList,您可以在其中保持按下的顺序。 3)实现一个将执行映射的方法,并在Activity的#onCreate方法中调用它。 4)将全局侦听器实例设置为所有按钮。
private HashMap<Integer, Integer> buttonMap = new HashMap<>();
private ArrayList<Integer> buttonPressedOrder = new ArrayList<>();
// A global listener instance to be set to all of your buttons
private View.OnClickListener listener = new View.OnClickListener() {
public void onClick(View selectedButton) {
int selectedButtonId = selectedButton.getId();
//Add pressed button to pressed buttons list
buttonPressedOrder.add(selectedButton.getId());
//Find button to hide and hide it
int hidingButtonId = buttonMap.get(selectedButtonId);
Button hidingButton = findViewById(hidingButtonId);
hidingButton.setVisibility(View.GONE);
}
}
//Put these inside your activity#onCreate
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
...
mapButtons();
Button button1 = findViewById(R.id.button1);
Button button2 = findViewById(R.id.button2);
...
button1.setOnClickListener(listener);
button2.setOnClickListener(listener);
}
// A method for mapping your buttons in the same line to each other
private void mapButtons(){
buttonMap.put(R.id.button1, R.id.button2)
buttonMap.put(R.id.button2, R.id.button1)
buttonMap.put(R.id.button3, R.id.button4)
buttonMap.put(R.id.button4, R.id.button3)
...
}
每当需要查看按按钮的顺序时,请使用此方法
public void getButtonPressedOrder(){
Resources res = getResources();
int numberOfPressedButtons = buttonPressedOrder.size();
for(int i=0; i<numberOfPressedButtons; i++){
Log.i("PressOrder", res.getResourceEntryName(buttonPressedOrder.get(i))
+ " is pressed at " + (i+1) + " order");
}
}
它将记录如下内容:
I / PressOrder:以1顺序按下button1
I / PressOrder:以2个顺序按下button5
I / PressOrder:按10顺序按一下button10
希望这会有所帮助!