2012-03-03 56 views
0

我在找什么是如何禁用用户交互几秒钟,我已经尝试了很多方法,但他们都没有在这里工作是一种方法。禁用用户交互几秒钟android

final LinearLayout ll = (LinearLayout)findViewById(R.id.linearLayout1); 
    ll.setEnabled(false); 


    new Handler().postDelayed(new Runnable(){ 
     public void run() { 
      ll.setEnabled(true); 
     } 
    }, 3000); 
+0

是否要仅针对列表视图或针对整个活动禁用它(因此用户在您的应用程序中将无法执行任何操作)。 – 2012-03-03 08:25:31

+0

我想要整个活动。 – Programmer 2012-03-03 08:44:10

+0

还有一个问题:我想你确实需要这样做,因为你希望在用户可以继续之前先完成一些后台进程? (或者是否还有其他特殊原因?) – 2012-03-03 08:45:56

回答

2

我认为你的任务使用postDelayed线程是不是要走的路。使用AsyncTask

一个可能的问题是,使用您当前的方法,您只需将等待时间缩短到3秒,但使用AsyncTask即可在任务完成后立即继续。异步任务基本上可以在后台执行某些操作,而不会阻塞UI。但是,您也可以将它们配置为显示进度对话框,这将阻止与您的应用程序的任何用户交互,直到任务完成。

这里是在后台执行的东西,并显示进度对话框异步任务的例子:

public class ProgressTask extends AsyncTask<Void, Void, Boolean> { 
    /** progress dialog to show user that the backup is processing. */ 
    private ProgressDialog dialog; 
    /** application context. */ 
    private Activity activity; 

    public ProgressTask(Activity activity) { 
     this.activity = activity; 
     dialog = new ProgressDialog(context); 
    } 

    protected void onPreExecute() { 
     this.dialog.setMessage("Please wait"); 
     this.dialog.show(); 
    } 

    @Override 
    protected void onPostExecute(final Boolean success) { 
     if (dialog.isShowing()) { 
      dialog.dismiss(); 
     } 
    } 

    protected Boolean doInBackground(final Void... args) { 
     // HERE GOES YOUR BACKGROUND WORK 
    } 
} 

我建议你把你的文章推迟的// HERE GOES YOUR BACKGROUND WORK的工作地点。