0

次のシナリオを機能させるために、ボタンの 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);
                    }
            }

        }

};
4

1 に答える 1

0

a1b1、 の4 つのボタンを使用して、 用と用の 2 つの OnClickListeners を作成できます。最初にクリックされたボタンである場合、OnClickListener はフラグを設定する必要があります。次に、もう一方の OnClickListener は、フラグが設定されているかどうか (つまり、2 番目にクリックされたボタンであるかどうか) を確認し、最初にクリックされたボタンとは異なるカテゴリにあるかどうかを確認できます。a2b2ab

十分な作業ができたら、List各カテゴリのボタンの配列 (できれば ) を作成して、最終チェックをはるかに簡単にすることができます。実際、わずかな工夫で、これらすべてを単一の OnClickListener に減らすことができます。違いはactionではなく、データ(つまり、どのボタンがどのカテゴリにあるか)だけだからです。

于 2013-03-28T23:34:20.223 に答える