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);
}
}