如何禁用相同布局的按钮之间的交互?

我有两套布局,用按钮填充。 有没有办法禁用相同布局的按钮之间的任何交互? 当我点击一个按钮然后从同一个布局中点击另一个按钮时,我不需要发生任何事情。 对于属于上下布局的按钮,我用“和”标记每个按钮。 我有5种。 我有一些相互作用beetwen按钮的oposite布局,并且工作正常(实际上交互在任何两个给定按钮之间工作正常,这很糟糕),但我不希望相同布局的按钮之间的交互。

这是我的游戏课程,而不是全部,只是重要的部分。 此外,我删除了其余按钮的代码,只留下4个按钮,每个布局2个,以节省一些空间。 我从sqlite数据库导入一些文本,并随机将其设置为我的按钮。

final OnClickListener clickListener = new OnClickListener() { private Button buttonClicked; public void onClick(View v) { Button button = (Button) v; button.getBackground().setColorFilter(new LightingColorFilter(0xFFFFFFFF, 0x003333)); if (buttonClicked == null) { // first button is clicked buttonClicked = button; } else { // second button is clicked if (buttonClicked.getTag().equals(button.getTag())) { button.getBackground().setColorFilter(new LightingColorFilter(0xFFFFFFFF, 0x66FF33)); buttonClicked.getBackground().setColorFilter(new LightingColorFilter(0xFFFFFFFF, 0x66FF33)); buttonClicked.setEnabled(false); button.setEnabled(false); } else { buttonClicked.setEnabled(false); buttonClicked.setTextColor(Color.GRAY); buttonClicked.getBackground().setColorFilter(new LightingColorFilter(0xFFFFFFFF, 0xFFCC99)); button.getBackground().clearColorFilter(); } buttonClicked = null; } }; protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.game); a1 = (Button) findViewById(R.id.bA1); a2 = (Button) findViewById(R.id.bA2); b1 = (Button) findViewById(R.id.bB1); b2 = (Button) findViewById(R.id.bB2); nextQuestion(); } public void nextQuestion() { TestAdapter mDbHelper = new TestAdapter(this); mDbHelper.createDatabase(); try{ mDbHelper.open(); Cursor c = mDbHelper.getTestData(generateWhereClause()); mAnsweredQuestions.add(c.getLong(0)); ArrayList labelsA = new ArrayList(); ArrayList labelsB = new ArrayList(); labelsA.add(new MyStruct(c.getString(2), "1")); // this tag should be the same to button that matches labelsB.add(new MyStruct(c.getString(3), "1")); labelsA.add(new MyStruct(c.getString(4), "2")); labelsB.add(new MyStruct(c.getString(5), "2")); Collections.shuffle(labelsA); Collections.shuffle(labelsB); pitanje.setText(c.getString(1)); a1.setText(labelsA.get(0).label); a1.setTag(labelsA.get(0).tag); a1.setOnClickListener(clickListener); a1.getBackground().clearColorFilter(); a1.setEnabled(true); b1.setText(labelsB.get(0).label); b1.setTag(labelsB.get(0).tag); b1.setOnClickListener(clickListener); b1.getBackground().clearColorFilter(); b1.setEnabled(true); a2.setText(labelsA.get(1).label); a2.setTag(labelsA.get(1).tag); a2.setOnClickListener(clickListener); a2.getBackground().clearColorFilter(); a2.setEnabled(true); b2.setText(labelsB.get(1).label); b2.setTag(labelsB.get(1).tag); b2.setOnClickListener(clickListener); b2.getBackground().clearColorFilter(); b2.setEnabled(true); } finally{ mDbHelper.close(); } 

XML:

        

您可以使用getParent方法并比较两个视图的父级。 如果父级是相同的,则按钮处于相同的布局中,不会发生任何事情。

改变你的别人:

 } else { // second button is clicked 

……如果:

 // only do stuff if buttons are in different layouts } else if (button.getParent () != buttonClicked.getParent()) { // second button is clicked