有沒有辦法爲兩個不同的按鈕列設置兩個按鈕onclicklisteners(設置在兩個佈局,一個佈局和B佈局,從A1-A8和B1-B8按鈕),以便下一個screnario工作:I想從他們自己的佈局中得到按鈕而不是在他們之間有任何動作(例如,當我點擊A2然後A7什麼都沒有發生時,並且在A7之後,如果我再次單擊A3時什麼也沒有發生,並且仍然如果我點擊A8 ....並且所以ON),但當我點擊例如A1和B7後,我有一些代碼,比較按鈕的文本,該部分工作正常。但我在第一部分中苦苦掙扎,那就是從相同佈局的按鈕點擊時不應該動作的部分。我被建議使用兩個onlicklisteners(現在我只用一個按鈕),但我沒有找到完成的方式。我從導入的prepopulated sqlite數據庫隨機設置文本到按鈕。這裏是我到目前爲止的代碼:如何爲兩組佈局中的兩組按鈕實現兩個onlicklisteners?
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;
和兩個onClickListeners:
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);
}
}
}
};
首先,我建議你使用一個數組,因爲變量名稱只有一個數字。 –
其次,嘗試將您的示例代碼減少到提問您需要的最少數量的按鈕。 (可能是2或4.) –
行,編輯。你能給我一個例子,你將如何處理我的問題與數組? – nabuko