2011-11-18 24 views
13

Tôi có bố cục được hiển thị trên một nút nhấp. Tôi muốn ẩn bố cục đó sau 10 giây.Ẩn bố cục sau 10 giây trong Android?

protected void onCreate(Bundle savedInstanceState) { 
    super.onCreate(savedInstanceState); 

    mVolHandler = new Handler(); 
    mVolRunnable = new Runnable() { 
     public void run() { 
      mVolLayout.setVisibility(View.GONE); 
     } 
    }; 
} 


private OnTouchListener mVolPlusOnTouchListener = new OnTouchListener() { 
    @Override 
    public boolean onTouch(View v, MotionEvent event) { 
     mVolLayout.setVisibility(View.VISIBLE); 
     mVolHandler.postDelayed(mVolRunnable, 10000); 
    } 
} 
+0

Tôi đã thử sử dụng trình xử lý. Khi tôi nhấp vào nút bố cục được hiển thị và sử dụng trình xử lý được ẩn sau 10 giây. Nhưng vấn đề là khi liên tục nhấp vào nút, nó sẽ bị ẩn .Nếu nút một lần nữa nhấp vào bố trí được hiển thị nhưng đi ẩn trước 10 giây. Tôi muốn hiển thị bố cục trong 10 giây từ lần nhấp cuối cùng của người dùng. – user987362

+0

Tôi có bất kỳ giải pháp nào khác không? Xin hãy giúp tôi – user987362

+0

Tôi đã thử như vậy – user987362

Trả lời

34

Make sử dụng Handler & Runnable.

Bạn có thể trì hoãn Runnable bằng cách sử dụng postDelayed của Trình xử lý.

Runnable mRunnable; 
Handler mHandler=new Handler(); 

mRunnable=new Runnable() { 

      @Override 
      public void run() { 
       // TODO Auto-generated method stub 
       yourLayoutObject.setVisibility(View.INVISIBLE); //If you want just hide the View. But it will retain space occupied by the View. 
       yourLayoutObject.setVisibility(View.GONE); //This will remove the View. and free s the space occupied by the View  
      } 
     }; 

Bây giờ bên trong sự kiện onButtonClick bạn phải nói với Handler để chạy một Runnable sau X giây milli:

mHandler.postDelayed(mRunnable,10*1000); 

Nếu bạn muốn hủy bỏ này thì bạn phải sử dụng mHandler.removeCallbacks(mRunnable);

Cập nhật (Theo câu hỏi đã chỉnh sửa) Bạn chỉ cần xóa cuộc gọi lại từ Handler bằng cách sử dụng removeCallbacks()

Vì vậy, chỉ cần cập nhật mã của bạn bên onTouch phương pháp như thế này:

mVolLayout.setVisibility(View.VISIBLE); 
mVolHandler.removeCallbacks(mVolRunnable); 
mVolHandler.postDelayed(mVolRunnable, 10000); 
2

Bạn có thể sử dụng một Animation bắt đầu khi bạn nhấp vào nút, với giây thời gian 10 mà mất dần ra cách bố trí và có lẽ đặt mức độ hiển thị GONE ở cuối.

+0

+1 cho cung cấp một giải pháp tốt. mặc dù sử dụng một bộ đếm thời gian cũng sẽ phục vụ mục đích .. nó sẽ hữu ích nếu bạn đã chỉ ra cách nó thực sự làm .. – ngesh

+1

Làm bố cục chỉ biến mất là không thanh lịch đó là lý do tại sao tôi đề xuất hình động. –

0

Sử dụng Trình xử lý để ẩn bố cục sau 10 giây. Sử dụng bài viết trì hoãn phương pháp

0
public void onCreate(Bundle savedInstanceState){ 
    super.onCreate(savedInstanceState); 
    pd=ProgressDialog.show(this,"","Loading, Please wait .. ",true); 

    setTitle("set title"); 
    final Handler uiThreadCallback=new Handler(); 
    final Runnable runInUIThread= new Runnable(){ 
     public void run(){ 
      fnDraw(); 
      pd.dismiss(); 

     } 
    }; 
    new Thread(){ 
     @Override public void run(){ 
      uiThreadCallback.post(runInUIThread); 
     } 
    }.start(); 
} 
public void fnDraw(){ 
    setContentView(R.layout.define ur xml if any); 
    i1=(ImageView)findViewById(R.id.i1); 
    t1=(TextView)findViewById(R.id.t1); 
    t2=(TextView)findViewById(R.id.t2); 

    timerRegister=new Timer(); 
    lIteration=0; 
    checkTime=new TimerTask(){ 
     public void run(){ 
      if(lIteration==1){ 
       timerRegister.cancel(); 
       uiDrawThreadCallback.post(runInUIDrawThread); 
      } 
      lIteration++; 
      return; 
     } 
    }; 
    timerRegister.scheduleAtFixedRate(checkTime,0,10000); 
} 
final Handler uiDrawThreadCallback=new Handler(); 
final Runnable runInUIDrawThread= new Runnable(){ 
    @Override 
    public void run(){ 
     fnDrawAgain(); 
    } 
}; 
public void fnDrawAgain(){ 
    Intent intent=new Intent(this,new class you want to open.class); 
    startActivity(intent); 
} 

}

thử nó chắc chắn nó sẽ làm việc trong ur trên tạo màn hình

1

Các đoạn mã sau đây ẩn bố trí của bạn trong 3 giây. Bạn có thể thay đổi thời gian bằng cách thay đổi hằng số mà tôi đã cung cấp ở đây cho sự chậm trễ.

  private void HideLayout() { 

    final View view=volume_control_layout; 
    view.postDelayed(new Runnable() { 

     public void run() { 
      if(!volume_controller.isPressed()) 
      { 
      view.setVisibility(View.INVISIBLE); 
      } 
      else 
      { 
       HideLayout(); 
      } 
     } 
    }, 3000); // (3000 == 3secs) 

    } 
0

không có giải pháp nào ở trên là giải pháp tốt. Hãy tưởng tượng rằng khung nhìn không hiển thị sau 10s (ví dụ: nó được cuộn xuống) để Visibility.GONE sẽ không hoạt động trên nó. Tôi vẫn đang tìm kiếm giải pháp

Các vấn đề liên quan