0

有没有办法为两个不同的按钮列设置两个按钮 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);
                    }
            }

        }

};
4

1 回答 1

0

使用四个按钮 、、a1和,您可以创建两个 OnClickListener:一个用于s,一个用于s。如果 OnClickListener 是第一个单击的按钮,则应设置一个标志。然后另一个 OnClickListener 可以检查是否设置了标志(意味着它是单击的第二个按钮)并检查它是否与单击的第一个按钮属于不同的类别。b1a2b2ab

一旦完成了这么多工作,您就可List以为每个类别创建一个按钮数组(或者更好的是一个),以使最终检查更加容易。事实上,只要稍加巧妙,您就可以将所有这些简化为一个 OnClickListener,因为唯一的区别是数据(即哪些按钮属于哪个类别),而不是操作

于 2013-03-28T23:34:20.223 回答