2013-12-18 123 views
0

我對Android和Java很有新意,對於這個問題,我很抱歉如果我的問題的答案很簡單。選項菜單在運行時保持打開狀態AsyncTask

問題是,一旦選擇了某個菜單項,我需要運行一個相當長(2-3秒)的任務(涉及HTTP請求,並且據我所知我需要執行上述操作與主窗口不同的線程),然後顯示從AsyncTask獲取的結果的一部分。

一切工作正常,除了在執行AsyncTask的整個過程中菜單保持打開這一事實:我無法找到避免這種情況的方法。

我試圖用更短的,而是類似,例如

這裏是在MainActivity代碼來總結我的問題:

public class MainActivity extends Activity { 

    @Override 
    protected void onCreate(Bundle savedInstanceState) { 
     super.onCreate(savedInstanceState); 
     setContentView(R.layout.activity_main); 
    } 

    @Override 
    public boolean onCreateOptionsMenu(Menu menu) { 
     super.onCreateOptionsMenu(menu); 
     menu.add(Menu.NONE,1,Menu.NONE,"Text"); 
     return true; 
    } 

    @Override 
    public boolean onOptionsItemSelected (MenuItem mi) { 
     try { 
      String a = new AsyncTest().execute().get(); 
      Toast.makeText(MainActivity.this,a, Toast.LENGTH_SHORT).show(); 
      return true; 
     } 
     catch (Exception e) { 
      return false; 
     } 
    } 
} 

而這裏的的AsyncTask 公共類AsyncTest擴展的AsyncTask {

@Override 
    protected String doInBackground(Void... params) { 
     long i; 
     for (i=0;i<100000000;i++); 
     return "Lol"; 
    } 
} 

我試過用closeOptionsMenu();在onOptionsItemSelected之後,爲了關閉菜單之前的As yncTask被執行,但它不起作用。

我在google上沒有發現太多的話題。

回答

1

get()被阻塞。所以基本上你在另一個線程上下了工夫,但是你基本上正在等待主UI線程阻止菜單關閉。

試試這個:

@Override 
    public boolean onOptionsItemSelected (MenuItem mi) { 
    new AsyncTest() { 

     public void onPostExecute(String result) { 
     Toast.makeText(MainActivity.this, result, Toast.LENGTH_SHORT).show(); 
     } 
     }.execute(); 
    return true; 
    } 
相關問題