0

これは非常に単純な問題のように思えますが、何らかの理由で適切な答えを見つけることができません。私が持っているのは、フレーム レイアウトで 1 つが積み重ねられた 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);

            }
        });
4

3 に答える 3

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);
    }
});
于 2013-01-18T18:53:10.510 に答える
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では一般的なパターンです。

于 2013-01-18T18:48:23.743 に答える
0

それを行うには多くの方法があります。

アクティビティにハンドラーを実装し(UI スレッドへのリンク)、新しいスレッドから sendMessageDelayed を投稿する必要があります。

編集: スコットW.は正しい:同じロジックでコマンドを使用できます

PostDelayed(Your_runnable, time_to_wait)

于 2013-01-18T18:41:45.633 に答える