选项菜单在运行AsyncTask时保持打开状态

时间:2013-12-18 22:48:00

标签: java android menu

我对Android很新,对于Java,就此而言,如果问题的答案很简单,我会道歉。

问题在于,一旦选择了某个菜单项,我需要运行相当长的(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";
    }   
}

我尝试在onOptionsItemSelected之后使用closeOptionsMenu();,以便在执行AsyncTask之前关闭菜单,但它不起作用。

我在google上的主题上找不到太多。

1 个答案:

答案 0 :(得分: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;
   }