首先按下哪个按钮?

时间:2019-02-26 15:17:36

标签: android

我需要一种方法来知道首先按下了哪个按钮。应用的布局或多或少是这样的:

Button1 Button2
Button3 Button4
Button5 Button6
Button7 Button8
Button9 Button10
Button11 Button12

如果按下“行”按钮之一,则另一个按钮消失。问题是,我不知道如何知道这12个按钮中的哪个按钮先被按下,然后被按下,然后再按下第三,依此类推...

我用于隐藏按钮的代码效果很好,但这很简单。

//*[text()='target_text']//parent::div

我进行了搜索,但也许我不知道要搜索什么,也没有找到好的答案。

1 个答案:

答案 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

希望这会有所帮助!