Android 检查所有不可见按钮行和列

Android 检查所有不可见按钮行和列,android,button,Android,Button,这里是情况,我点击我的按钮,然后让它不可见一次点击。问题是:如何检查我的所有按钮在列和行中是否都不可见(没有人留下)。然后执行另一个命令。 这里是我的一些屏幕截图按钮,当前可见 我的代码: private void loadCards(){ try{ givingcards.start(); int size = ROW_COUNT*COL_COUNT; Log.i("

这里是情况,我点击我的按钮,然后让它不可见一次点击。问题是:如何检查我的所有按钮在列和行中是否都不可见(没有人留下)。然后执行另一个命令。 这里是我的一些屏幕截图按钮,当前可见

我的代码:

 private void loadCards(){
            try{
                givingcards.start();

                int size = ROW_COUNT*COL_COUNT;

                Log.i("loadCards()","size=" + size);

                ArrayList<Integer> list = new ArrayList<Integer>();

                for(int i=0;i<size;i++){
                    list.add(new Integer(i));
                }


                Random r = new Random();

                for(int i=size-1;i>=0;i--){
                    int t=0;

                    if(i>0){
                        t = r.nextInt(i);
                    }

                    t=list.remove(t).intValue();
                    cards[i%COL_COUNT][i/COL_COUNT]=t%(size/2);

                    Log.i("loadCards()", "card["+(i%COL_COUNT)+
                            "]["+(i/COL_COUNT)+"]=" + cards[i%COL_COUNT][i/COL_COUNT]);
                }
            }
            catch (Exception e) {
                Log.e("loadCards()", e+"");
            }

        }

        private TableRow createRow(int y){
             TableRow row = new TableRow(context);
             row.setHorizontalGravity(Gravity.CENTER);

             for (int x = 0; x < COL_COUNT; x++) {
                     row.addView(createImageButton(x,y));
             }
             return row;
        }

        private View createImageButton(int x, int y){
            Button button = new Button(context);
            button.setBackgroundDrawable(backImage);
            button.setId(100*x+y);
            button.setOnClickListener(buttonListener);
            return button;
        }
private void loadCards(){
试一试{
给卡片。开始();
int size=行数*列数;
Log.i(“loadCards()”,“size=“+size”);
ArrayList=新建ArrayList();
对于(int i=0;i=0;i--){
int t=0;
如果(i>0){
t=r.nextInt(i);
}
t=list.remove(t).intValue();
卡片[i%列数][i/i列数]=t%(大小/2);
Log.i(“loadCards()”,“card[”+(i%COL\u计数)+
“][”+(i/COLU计数)+“]=”+卡片[i%COLU计数][i/COLU计数]);
}
}
捕获(例外e){
Log.e(“loadCards()”,e+);
}
}
私有TableRow createRow(整数y){
TableRow row=新的TableRow(上下文);
设置水平重力(重力中心);
对于(int x=0;x
您可以应用一个简单的解决方案,即使用变量作为计数器,每当调用onClick()时,它都会更新

   int counter = 0;

    public void onClick(View view) {
      // visible button ..
      counter++;
      checkButtonsStatus();
    }

    public checkButtonsStatus() {
    if (counter == (4*4)) {
      // all buttons is visible
    }
    }
}
希望这有帮助

尝试以下代码:

createImageButton()中添加下面的方法

button.setTag(100*x+y);
按钮列表中
添加以下代码:

public void checkCards(){
                if(cards[secondCard.x][secondCard.y] == cards[firstCard.x][firstCard.y]){
                    successpair.start();
                    firstCard.button.setVisibility(View.INVISIBLE);
                    secondCard.button.setVisibility(View.INVISIBLE);
                }
                else {
                    wrongpair.start();
                    secondCard.button.setBackgroundDrawable(backImage);
                    firstCard.button.setBackgroundDrawable(backImage);
                }

                firstCard=null;
                secondCard=null;


                // check here


                boolean isAnyViewVisible = false;

                for (int y = 0; y < ROW_COUNT; y++) {
                    for (int x = 0; x < COL_COUNT; x++) {
                        View view = findViewWithTag(100 * x + y);

                        if (view!=null && view.getVisibility() == VISIBLE) {
                            isAnyViewVisible = true;
                            break;
                        }
                    }
                    if (isAnyViewVisible) {
                        break;
                    }
                }

                if (!isAnyViewVisible) {
                    // write your code here, which you want to execute when all views are invisible

                }


            }
//在这里设置标签 firstCard.button.setTag(100*x+y); } 否则{

            if(firstCard.x == x && firstCard.y == y){
                return; //the user pressed the same card
            }

            secondCard = new Card(button,x,y);
//在这里设置标签

            secondCard.button.setTag(100*x+y);

            turns++;
            ((TextView)findViewById(R.id.tv1)).setText("Tries: "+turns);


            TimerTask tt = new TimerTask() {

                @Override
                public void run() {
                    try{
                        synchronized (lock) {
                            handler.sendEmptyMessage(0);
                        }
                    }
                    catch (Exception e) {
                        Log.e("E1", e.getMessage());
                    }
                }
            };

            Timer t = new Timer(false);
            t.schedule(tt, 1300);
        }


    }

假设您有传递给适配器的
DataModel
,您应该在
DataModel
中有一个字段,告诉您是否翻转了
DataModel
,然后您可以检查它们是否都是基于此翻转的。好的,谢谢您的回答。但是您能给我一个示例代码吗?顺便说一句。我生成了这个按钮我可以,如果你发布你传递给适配器的
DataModel
类。也许你的适配器也可以,当你切换视图的
visibility
时,它是什么样的布局?它是GridView,RecyclerView还是一个简单的布局-RelativeLayout,LinearLayout?把你生成按钮的代码放出来。哇,谢谢老兄。我将稍后再试。不客气,如果您对此解决方案有任何问题,请发表意见。我尝试了您的代码,但我的应用程序崩溃并停止。这是什么崩溃?我已更改了代码,请试试这一个。我已经用此执行单击了侦听器,我可以将您的代码放在哪里工作?只需检查最后一行的turnCard()下方的
            secondCard.button.setTag(100*x+y);

            turns++;
            ((TextView)findViewById(R.id.tv1)).setText("Tries: "+turns);


            TimerTask tt = new TimerTask() {

                @Override
                public void run() {
                    try{
                        synchronized (lock) {
                            handler.sendEmptyMessage(0);
                        }
                    }
                    catch (Exception e) {
                        Log.e("E1", e.getMessage());
                    }
                }
            };

            Timer t = new Timer(false);
            t.schedule(tt, 1300);
        }


    }