使用AsyncTask中的Indeterminate Progress Bar替换ActionBar刷新按钮

时间:2014-12-26 13:59:53

标签: java android android-asynctask

我的问题可能与他的相似, Replacing an ActionBar menu item icon with an indeterminate ProgressBar 但问题不同。

我已经能够使用进度条替换操作栏中的刷新按钮,但是当我从onPreExecute类的AsyncTask方法尝试时,我总是会出现NullPointerException错误。

这是我的代码,

@Override
    public boolean onCreateOptionsMenu(Menu menu) {
        getMenuInflater().inflate(R.menu.desc_xml, menu);


        refreshMenuItem = menu.findItem(R.id.action_refresh);

        return true;
    }

@Override

public boolean onOptionsItemSelected(MenuItem item) {

    switch (item.getItemId()) {


    case R.id.action_refresh:
        new GetDesc().execute();
        return true;


    default:
        return super.onOptionsItemSelected(item);
    }
}

这是preExecute中的AsyncTask方法,

@Override
        protected void onPreExecute() {
            super.onPreExecute();
            refreshMenuItem.setActionView(R.layout.actionbar_indeterminate_progress);

        }

上面的代码总是给出错误,在StackOverflow上搜索后,我发现在从AsyncTask设置布局时我必须为类提供正确的上下文,

所以我在onPreExecute

中尝试了这个
myclass.this.refreshMenuItem.setActionView(R.layout.actionbar_indeterminate_progress);

但是会出现同样的错误。 所以我尝试了这个,

    refreshMenuItem.setActionView(com.abc.myproject.R.layout.actionbar_indeterminate_progress);

但我仍然遇到同样的错误。

为什么即使我提供上下文,我仍然会得到相同的错误?

这是logcat输出,

): FATAL EXCEPTION: main
): java.lang.RuntimeException: Unable to start activity ComponentInfo{com.myproject.abc java.lang.NullPointerException
):  at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2180)
):  at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:2230)
):  at android.app.ActivityThread.access$600(ActivityThread.java:141)
):  at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1234)
):  at android.os.Handler.dispatchMessage(Handler.java:99)
):  at android.os.Looper.loop(Looper.java:137)
):  at android.app.ActivityThread.main(ActivityThread.java:5041)
):  at java.lang.reflect.Method.invokeNative(Native Method)
):  at java.lang.reflect.Method.invoke(Method.java:511)
):  at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:793)
):  at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:560)
):  at dalvik.system.NativeStart.main(Native Method)
): Caused by: java.lang.NullPointerException
):  at $GetDesc.onPreExecute(NewsDetails.java:105)
):  at android.os.AsyncTask.executeOnExecutor(AsyncTask.java:586)
):  at android.os.AsyncTask.execute(AsyncTask.java:534)
):  at .onCreate(NewsDetails.java:40)
):  at android.app.Activity.performCreate(Activity.java:5104)
):  at android.app.Instrumentation.callActivityOnCreate(Instrumentation.java:1080)
):  at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2144)
):  ... 11 more

0 个答案:

没有答案