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

标签 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 公共(public)类 AsyncTest 扩展 AsyncTask{

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

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

我在谷歌上没有找到太多关于这个主题的信息。

最佳答案

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;
   }

关于java - 运行 AsyncTask 时选项菜单保持打开状态,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20670094/

相关文章:

java - Java 中 lambda 表达式的错误转换

java - Spring 批处理 : different job launcher for different jobs

html - Bootstrap 下拉菜单隐藏导航链接

java - Java 是否具有 Integer、Float、Double、Long 的可变类型?

java - 语句参数的 Hibernate 跟踪值,除了 blob

android - 屏幕方向改变后刷新资源

java - Android/Java - 如何检查 OutputStream 何时完成写入字节

c++ - 用 C 或 C++ 为 Android 编写应用程序?

CSS圆 Angular 问题

CSS水平菜单链接问题