Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/android/187.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Android MenuItem setActionView(空)崩溃_Android_Android 4.0 Ice Cream Sandwich_Android Actionbar_Actionbarsherlock - Fatal编程技术网

Android MenuItem setActionView(空)崩溃

Android MenuItem setActionView(空)崩溃,android,android-4.0-ice-cream-sandwich,android-actionbar,actionbarsherlock,Android,Android 4.0 Ice Cream Sandwich,Android Actionbar,Actionbarsherlock,在android 4.0.3上,如果调用MenuItem.setActionViewnull,然后旋转屏幕,我的应用程序将崩溃 我想做的是模仿GMail应用程序的actionbar,如果你点击一个项目,它就会变成一个进度条 但是,它现在保存ActionView的状态,当它试图恢复它时,它会这样说 无法启动活动组件信息{}: java.lang.ClassCastException:android.view.AbsSavedState$1不能为空 转换为android.widget.Progres

在android 4.0.3上,如果调用MenuItem.setActionViewnull,然后旋转屏幕,我的应用程序将崩溃

我想做的是模仿GMail应用程序的actionbar,如果你点击一个项目,它就会变成一个进度条

但是,它现在保存ActionView的状态,当它试图恢复它时,它会这样说

无法启动活动组件信息{}: java.lang.ClassCastException:android.view.AbsSavedState$1不能为空 转换为android.widget.ProgressBar$SavedState

有人有这方面的工作代码吗?还是一种解决方法

哦,如果有关系的话,我会用actionbarsherlock。它不应该这样做,因为在4.03上它只调用所有系统调用

代码:

XML:


你能不能在变成进度条的点击周围多发布一些代码

我使用ABS,下面是一些代码,当用户单击按钮时启动AsyncTask和ProgressBar。代码在SherlockFragment中:

public class LoginFragment extends SherlockFragment {
      ...

    loginButton = (Button) getActivity().findViewById(R.id.loginButton);
    loginButton.setOnClickListener(loginListener);


public OnClickListener loginListener = new OnClickListener() {
    @Override
    public void onClick(View v) {
            ProgressDialog progressDialog = new ProgressDialog(getActivity());
            progressDialog.setMessage("Logging in...");
            LoginTask loginTask = new LoginTask((Polling) getActivity(), progressDialog);
            loginTask.execute();
然后,ProgressDialog在每个方法的ASyncTask setVisibility中都受到控制:

public class LoginTask extends AsyncTask<String, Void, Integer> {

private ProgressDialog progressDialog;
private Polling activity;
private int id = -1;
private JSONParser jsonParser;
private static String loginURL = "";
private static String registerURL = "";
private static String KEY_SUCCESS = "success";
private static String KEY_ERROR = "error";
private static String KEY_ERROR_MSG = "error_msg";
private static String KEY_UID = "uid";
private static String KEY_NAME = "name";
private static String KEY_EMAIL = "email";
private static String KEY_CREATED_AT = "created_at";
private int responseCode = 0;

public LoginTask(Polling activity, ProgressDialog progressDialog)
{
    this.activity = activity;
    this.progressDialog = progressDialog;
}

@Override
protected void onPreExecute()
{
    progressDialog.show();
}

protected Integer doInBackground(String... arg0) {

    // check for login response
    try {
        if (json.getString(KEY_SUCCESS) != null) {
            String res = json.getString(KEY_SUCCESS);

            if(Integer.parseInt(res) == 1){
                //user successfully logged in
                // Store user details in SQLite Database
                DatabaseHandler db = new DatabaseHandler(activity.getApplicationContext());
                JSONObject json_user = json.getJSONObject("user");
                //Log.v("name", json_user.getString(KEY_NAME));
                // Clear all previous data in database
                userFunction.logoutUser(activity.getApplicationContext());
                db.addUser(json_user.getString(KEY_NAME), json_user.getString(KEY_EMAIL), 
                        json.getString(KEY_UID), json_user.getString(KEY_CREATED_AT));                        

                responseCode = 1;
                // Close Login Screen
                //finish();

            }else{
                responseCode = 0;
                // Error in login
            }
        }

    } catch (NullPointerException e) {
        e.printStackTrace();

    }
    catch (JSONException e) {
        e.printStackTrace();
    }

    return responseCode;
}

@Override
protected void onPostExecute(Integer responseCode)
{

    if (responseCode == 1) {
        progressDialog.dismiss();
        activity.loginReport(responseCode);


    }
    if (responseCode == 0) {
        progressDialog.dismiss();
        activity.loginReport(responseCode);

    }


}

}

您能否在变成进度条的单击周围发布更多的代码

我使用ABS,下面是一些代码,当用户单击按钮时启动AsyncTask和ProgressBar。代码在SherlockFragment中:

public class LoginFragment extends SherlockFragment {
      ...

    loginButton = (Button) getActivity().findViewById(R.id.loginButton);
    loginButton.setOnClickListener(loginListener);


public OnClickListener loginListener = new OnClickListener() {
    @Override
    public void onClick(View v) {
            ProgressDialog progressDialog = new ProgressDialog(getActivity());
            progressDialog.setMessage("Logging in...");
            LoginTask loginTask = new LoginTask((Polling) getActivity(), progressDialog);
            loginTask.execute();
然后,ProgressDialog在每个方法的ASyncTask setVisibility中都受到控制:

public class LoginTask extends AsyncTask<String, Void, Integer> {

private ProgressDialog progressDialog;
private Polling activity;
private int id = -1;
private JSONParser jsonParser;
private static String loginURL = "";
private static String registerURL = "";
private static String KEY_SUCCESS = "success";
private static String KEY_ERROR = "error";
private static String KEY_ERROR_MSG = "error_msg";
private static String KEY_UID = "uid";
private static String KEY_NAME = "name";
private static String KEY_EMAIL = "email";
private static String KEY_CREATED_AT = "created_at";
private int responseCode = 0;

public LoginTask(Polling activity, ProgressDialog progressDialog)
{
    this.activity = activity;
    this.progressDialog = progressDialog;
}

@Override
protected void onPreExecute()
{
    progressDialog.show();
}

protected Integer doInBackground(String... arg0) {

    // check for login response
    try {
        if (json.getString(KEY_SUCCESS) != null) {
            String res = json.getString(KEY_SUCCESS);

            if(Integer.parseInt(res) == 1){
                //user successfully logged in
                // Store user details in SQLite Database
                DatabaseHandler db = new DatabaseHandler(activity.getApplicationContext());
                JSONObject json_user = json.getJSONObject("user");
                //Log.v("name", json_user.getString(KEY_NAME));
                // Clear all previous data in database
                userFunction.logoutUser(activity.getApplicationContext());
                db.addUser(json_user.getString(KEY_NAME), json_user.getString(KEY_EMAIL), 
                        json.getString(KEY_UID), json_user.getString(KEY_CREATED_AT));                        

                responseCode = 1;
                // Close Login Screen
                //finish();

            }else{
                responseCode = 0;
                // Error in login
            }
        }

    } catch (NullPointerException e) {
        e.printStackTrace();

    }
    catch (JSONException e) {
        e.printStackTrace();
    }

    return responseCode;
}

@Override
protected void onPostExecute(Integer responseCode)
{

    if (responseCode == 1) {
        progressDialog.dismiss();
        activity.loginReport(responseCode);


    }
    if (responseCode == 0) {
        progressDialog.dismiss();
        activity.loginReport(responseCode);

    }


}
}