没有点击的Android按钮设置按钮不可见

时间:2013-01-18 18:32:48

标签: android button visible invisible

这似乎是一个非常简单的问题,但由于某种原因,我发现自己无法找到任何合适的答案。我所拥有的是2个按钮,其中一个在框架布局中堆叠在另一个上,当单击Button1时,它变为不可见,并且出现Button2。我想要发生的事情是几秒钟后Button2自动变为不可见,Button1再次可见。这是我的一点代码。任何帮助将不胜感激!

button1 = (Button)findViewById(R.id.button1);
button2 = (Button)findViewById(R.id.button2);


        button1.setOnClickListener(new View.OnClickListener() {

            @Override
            public void onClick(View v) {
                // TODO Auto-generated method stub 

                button1.setVisibility(Button.GONE);
                button2.setVisibility(Button.VISIBLE);

            }
        });

3 个答案:

答案 0 :(得分:4)

比这里提出的许多解决方案更简单的解决方案如下:

button1 = (Button)findViewById(R.id.button1);
button2 = (Button)findViewById(R.id.button2);


button1.setOnClickListener(new View.OnClickListener() {

    @Override
    public void onClick(View v) {
        button1.setVisibility(Button.GONE);
        button2.setVisibility(Button.VISIBLE);
        button1.postDelayed(new Runnable() {
            @Override
            public void run() {
                button1.setVisibility(View.VISIBLE);
                button2.setVisibility(View.GONE);
            }
        }, 2000);
    }
});

答案 1 :(得分:1)

这可以是您的活动的内部类。

public class SleepTask extends AsyncTask<Void, Void, Void>
{

    final Button mOne, mTwo;

    public OnCreateTask(final Button one, final Button two) {  
          mOne = one;
          mTwo = two;
    }

    protected Void doInBackground(Void... params)
    {
         //Surround this with a try catch, I don't feel like typing it....
         Thread.sleep(2000);
    }

    protected void onPostExecute(Void result) {
         //This keeps us from updating a no longer relevant UI thread.
         //Such as if your acitivity has been paused or destroyed.
         if(!isCancelled())
         {
              //This executes on the UI thread.
              mOne.setVisible(Button.VISIBLE);
              mTwo.setVisible(Button.GONE);
          }
     }
}

在您的活动中

   SleepTask mCurTask;

   onPause()
   {
       super.onPause();
       if(mCurTask != null)
           mCurTask.cancel();
   }

在你的onClick

   if(mCurTask == null)
   {
       button1.setVisibility(Button.GONE);
       button2.setVisibility(Button.VISIBLE);
       mCurTask = new SleepTask;
       mCurTask.execute();
   }

我从头顶做了所有这些,所以它可能不得不通过日食来让它快乐。请记住,所有生命周期调用(onCreate,onDestroy)都是在UI线程上完成的,如果要使其安全,则只应访问UI线程上的mCurTask。

AsyncTasks非常好用,对于特定情况,这可能会过度杀戮,但这是Android中常见的模式。

答案 2 :(得分:0)

有很多方法可以做到。

您应该在活动中实现handler(链接到UI线程)并从新线程发布sendMessageDelayed

修改: Scott W.有权:在相同的逻辑中,您可以使用命令

PostDelayed(Your_runnable, time_to_wait)

相关问题