有没有办法为两个不同的按钮列设置两个按钮 onclicklisteners(设置为两种布局,A 布局和 B 布局,按钮来自 A1-A8 和 B1-B8),以便下一个脚本工作:我想要按钮从他们自己的布局中,他们之间没有任何动作(例如,当我单击 A2 然后 A7 没有发生任何事情,并且在 A7 之后如果我再次单击 A3 没有发生任何事情,并且仍然如果我单击 A8 .... 等等 ON ) 但是当我之后单击例如 A1 和 B7 时,我有一些代码可以比较按钮的文本,并且该部分工作正常。但我正在努力处理第一部分,即来自同一布局的按钮在单击时应该不采取任何行动的部分。有人建议我使用两个 onlicklisteners(现在我只对所有按钮使用一个),但我没有找到完成它的方法。我从导入的预填充 sqlite 数据库中随机将文本设置为按钮。到目前为止,这是我的代码:
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.spojnice);
a1 = (Button) findViewById(R.id.bA1);
a2 = (Button) findViewById(R.id.bA2);
a3 = (Button) findViewById(R.id.bA3);
b1 = (Button) findViewById(R.id.bB1);
b2 = (Button) findViewById(R.id.bB2);
b3 = (Button) findViewById(R.id.bB3);
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<MyStruct> labelsA = new ArrayList<MyStruct>();
ArrayList<MyStruct> labelsB = new ArrayList<MyStruct>();
labelsA.add(new MyStruct(c.getString(2), "1"));
labelsB.add(new MyStruct(c.getString(3), "1"));
labelsA.add(new MyStruct(c.getString(4), "2"));
labelsB.add(new MyStruct(c.getString(5), "2"));
labelsA.add(new MyStruct(c.getString(6), "3"));
labelsB.add(new MyStruct(c.getString(7), "3"));
Collections.shuffle(labelsA);
Collections.shuffle(labelsB);
question.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);
a3.setText(labelsA.get(2).label);
a3.setTag(labelsA.get(2).tag);
a3.setOnClickListener(clickListener);
a3.getBackground().clearColorFilter();
a3.setEnabled(true);
b3.setText(labelsB.get(2).label);
b3.setTag(labelsB.get(2).tag);
b3.setOnClickListener(clickListener);
b3.getBackground().clearColorFilter();
b3.setEnabled(true);
}
我将这行代码放在我的每个按钮的 xml 中,为左右布局标记它,也许它会有所帮助。我没有找到如何使它有用:
android:tag="L"
android:tag="R"
出于比较目的,此代码可以正常工作,但它也比较来自相同布局的按钮,而我不能这样做。如何实现两个 onclicklisteners 来管理我的这个问题?
编辑:
我尝试了一个数组,但它没有用。
private static final int[] idArrayA = {R.id.bA1, R.id.bA2, R.id.bA3, R.id.bA4, R.id.bA5, R.id.bA6, R.id.bA7, R.id.bA8};
private static final int[] idArrayB = {R.id.bB1, R.id.bB2, R.id.bB3, R.id.bB4, R.id.bB5, R.id.bB6, R.id.bB7, R.id.bB8};
final OnClickListener clickListenerA = new OnClickListener(){
public void onClick(View v) {
if (Arrays.asList(idArrayA).contains(v.getId())) {
return;
}else{
//do some code here if pressed buttons are not from the same array
}
}
};
这是我到目前为止所做的,我没有得到任何地方。有人可以用一些实际代码帮助我,来包装这个东西,因为这让我保持原位。我尝试了两个 onclicklisteners,但它根本不起作用,它实际上比我开始使用的第一个代码效果差。
我把它放在我的活动范围内:
private Button buttonClicked;
还有两个 onClickListener:
final OnClickListener clickListenerA = new OnClickListener(){
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);
counter = counter + 5;
score.setText("Poeni: " + counter);
}
}
}
};
final OnClickListener clickListenerB = new OnClickListener(){
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())) {
buttonClicked.getBackground().setColorFilter(new LightingColorFilter(0xFFFFFFFF, 0x66FF33));
button.getBackground().setColorFilter(new LightingColorFilter(0xFFFFFFFF, 0x66FF33));
buttonClicked.setEnabled(false);
button.setEnabled(false);
counter = counter + 5;
score.setText("Poeni: " + counter);
}
}
}
};