次のシナリオを機能させるために、ボタンの 2 つの異なる列に 2 つのボタン onclicklisteners を設定する方法はありますか (A レイアウトと B レイアウトの 2 つのレイアウトで設定し、A1-A8 と B1-B8 のボタンを使用)。独自のレイアウトから、それらの間でアクションが発生しないようにします (たとえば、A2 をクリックしてから A7 をクリックしても何も起こらず、A7 の後で A3 をクリックしても何も起こらず、それでも A8 をクリックしても....など) )しかし、その後たとえばA1とB7をクリックすると、ボタンのテキストを比較するコードがいくつかあり、その部分は正常に機能しています。しかし、私は最初の部分、同じレイアウトのボタンがクリックされたときに何もしないはずの部分に苦労しています。2 つの onlicklistener を使用するようにアドバイスされましたが (現在はすべてのボタンに 1 つしか使用していません)、それを完了する方法が見つかりませんでした。インポートされた事前入力された 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"
比較目的では、このコードは正常に機能しますが、同じレイアウトのボタンも比較しますが、それはできません。私のこの問題を管理するために2つの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
}
}
};
これは私がこれまでやってきたことであり、どこにも行きません。このことをラップするために、誰かが実際のコードで私を助けることができますか? 2 つの onclicklisteners を試してみましたが、まったく機能しません。実際には、最初に使用したコードよりもうまく機能していません。
これをアクティビティスコープに入れました:
private Button buttonClicked;
そして 2 つの 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);
}
}
}
};