简体   繁体   中英

Android Spinner Selected Item get changes on start of next activity

In my app I am using more than one spinners in one activity everything is working fine but when I starts another activity based on selected items of spinners from my current activity, all of spinners selected item get changes to its "0" index value by itself. When I came back from next activity to the one with spinners (ie when activity resumes) its selected values are set to "0" index. How can I stop this behaviour of spinners of changing its selected items on starting another activity.

onSavedInstanceStateMethod for saving indexes of spinner values

 @Override
protected void onSaveInstanceState(Bundle outState) {
    super.onSaveInstanceState(outState);
    outState.putInt("InterestSpinner", interest.getSelectedItemPosition());
    outState.putInt("CompanySpinner", company.getSelectedItemPosition());
    outState.putInt("PolicySpinner", policy.getSelectedItemPosition());
    outState.putInt("DeptSpinner", dept.getSelectedItemPosition());
}

Here is how I am calling another activity after putting some strings in intent

Intent intent = new Intent(PolicySelection.this, TakePicture.class);

                intent.putExtra("INTERESTID", interestId);
                intent.putExtra("COMPANYID", companyId);
                intent.putExtra("TRANSID", transID);
                intent.putExtra("UserName", username);
                intent.putExtra("Password", password);
                intent.putExtra("ClaimID", "");
                intent.putExtra("OP", "UNDERWRITING");

                startActivity(intent);

Here is my one spinner onItemChangeListener() method `

company.setOnItemSelectedListener(new AdapterView.OnItemSelectedListener() {
        public void onItemSelected(AdapterView<?> arg0, View v, int position, long id) {
            popDeptSpinner();
            popPolicySpinner();
            popInterestSpinner();
        }

        public void onNothingSelected(AdapterView<?> arg0) {
        }
    });`

Here is my onCreate Method

 @Override
protected void onCreate(Bundle savedInstanceState) {

    super.onCreate(savedInstanceState);
    setContentView(R.layout.policy_selection);

    policy = (Spinner) findViewById(R.id.policySelectionSpinner);
    company = (Spinner) findViewById(R.id.companySelectSpinner);
    interest = (Spinner) findViewById(R.id.interestIdSpinner);
    department = (Spinner) findViewById(R.id.deptSpinner);
    camera = (Button) findViewById(R.id.camera);
    damages = (Button) findViewById(R.id.damages);
    upload = (Button) findViewById(R.id.upload);
    showDetail = (Button) findViewById(R.id.showDetail);
    title = (TextView) findViewById(R.id.title);


    popCompanySpinner();

    popDeptSpinner();

    popPolicySpinner();

    popInterestSpinner();


    showDetail.setOnClickListener(new View.OnClickListener() {
        @Override
        public void onClick(View view) {

            boolean ready = isNetworkAvailable();
            if (ready) {
                if (policy.getAdapter().getCount() > 0) {
                    deptID = department.getSelectedItem().toString();
                    if (deptID.equals("MOTOR") || deptID.equals("MISCELLEANEOUS")) {
                        interestId = interest.getSelectedItem().toString();
                        transID = transId_list.get(getPositions(policy.getSelectedItem().toString()));
                        branchId = branchId_list.get(getPositions(policy.getSelectedItem().toString()));
                        deptNo = deptNoList.get(getPositions(policy.getSelectedItem().toString()));

                        Intent intent = new Intent(PolicySelection.this, InterestDetail.class);

                        intent.putExtra("UserName", username);
                        intent.putExtra("Password", password);
                        intent.putExtra("InterestID", interestId);
                        intent.putExtra("DeptID", deptNo);
                        intent.putExtra("TransID", transID);

                        startActivity(intent);

                    } else {
                        Toast.makeText(PolicySelection.this, "No Details for Current Policy!", Toast.LENGTH_SHORT).show();
                    }
                } else {
                    Toast.makeText(PolicySelection.this, "No Policy Exists in Company! ", Toast.LENGTH_LONG).show();
                }
            } else {
                Toast.makeText(PolicySelection.this, "Internet Connectivity Problem!", Toast.LENGTH_SHORT).show();
            }

        }
    });

    damages.setOnClickListener(new View.OnClickListener() {
        @Override
        public void onClick(View v) {
            boolean ready = isNetworkAvailable();
            if (ready) {
                if (policy.getAdapter().getCount() > 0) {
                    if (department.getSelectedItem().toString().equals("MOTOR")) {
                        Integer pos;
                        pos = getPositions(policy.getSelectedItem().toString());
                        switch (company.getSelectedItem().toString()) {
                            case "UIC":
                                transID = transId_list.get(pos);
                                companyId = "UIC";
                                surveyTransID = UICSurveyTransID.get(getInterestIdPositions(interest.getSelectedItem().toString()));
                                break;
                            case "UICTAK":
                                transID = transId_list.get(pos);
                                companyId = "UICTAK";
                                surveyTransID = UICTAKSurveyTransID.get(getInterestIdPositions(interest.getSelectedItem().toString()));
                                break;
                            case "SPI":
                                transID = transId_list.get(pos);
                                companyId = "SPI";
                                surveyTransID = SPISurveyTransID.get(getInterestIdPositions(interest.getSelectedItem().toString()));
                                break;
                            case "SPITAK":
                                transID = transId_list.get(pos);
                                companyId = "SPITAK";
                                surveyTransID = SPITAKSurveyTransID.get(getInterestIdPositions(interest.getSelectedItem().toString()));
                                break;
                            default:
                                break;
                        }

                        Intent intent = new Intent(PolicySelection.this, DamagesDetail.class);

                        if (Objects.equals(transID, "")) {
                            company.getSelectedItem().toString();
                        } else {

                            String options = new WebServiceCall().getPreInspectionOptions("GetPreInspectionOptions", username, password, companyId, transID);

                            intent.putExtra("TRANSID", transID);
                            intent.putExtra("COMPANYID", companyId);
                            intent.putExtra("UserName", username);
                            intent.putExtra("Password", password);
                            intent.putExtra("Options", options);
                            intent.putExtra("SurveyTransID", surveyTransID);
                        }

                        startActivity(intent);

                    } else {
                        Toast.makeText(PolicySelection.this, "No Damages Form for Current Policy!", Toast.LENGTH_SHORT).show();
                    }
                } else {
                    Toast.makeText(PolicySelection.this, "No Policy Exists in Company! ", Toast.LENGTH_LONG).show();
                }

            } else {
                Toast.makeText(PolicySelection.this, "Internet Connectivity Problem!", Toast.LENGTH_SHORT).show();
            }
        }
    });

    upload.setOnClickListener(new View.OnClickListener() {
        @Override
        public void onClick(View view) {

            boolean ready = isNetworkAvailable();
            if (ready) {
                if (policy.getAdapter().getCount() > 0) {

                    Integer pos;
                    pos = getPositions(policy.getSelectedItem().toString());

                    switch (company.getSelectedItem().toString()) {
                        case "UIC":
                            transID = transId_list.get(pos);
                            branchId = branchId_list.get(pos);
                            break;
                        case "UICTAK":
                            transID = transId_list.get(pos);
                            branchId = branchId_list.get(pos);
                            break;
                        case "SPI":
                            transID = transId_list.get(pos);
                            branchId = branchId_list.get(pos);
                            break;
                        case "SPITAK":
                            transID = transId_list.get(pos);
                            branchId = branchId_list.get(pos);
                            break;
                        default:
                            break;
                    }

                    Intent intent = new Intent(PolicySelection.this, SendInfoForm.class);

                    intent.putExtra("USERNAME", username);
                    intent.putExtra("PASSWORD", password);
                    intent.putExtra("COMPANYID", company.getSelectedItem().toString());
                    intent.putExtra("LAT", "1");
                    intent.putExtra("LONG", "1");
                    intent.putExtra("DEPTID", department.getSelectedItem().toString());
                    intent.putExtra("INTERESTID", interest.getSelectedItem().toString());
                    intent.putExtra("BRANCHID", branchId);
                    intent.putExtra("TRANSID", transID);
                    intent.putExtra("OP", "UNDERWRITING");
                    intent.putExtra("CLAIMID", "");

                    startActivity(intent);
                } else {
                    Toast.makeText(PolicySelection.this, "No Policy Exists in Company! ", Toast.LENGTH_LONG).show();
                }

            } else {
                Toast.makeText(PolicySelection.this, "Internet Connectivity Problem!", Toast.LENGTH_SHORT).show();
            }
        }
    });

    camera.setOnClickListener(new View.OnClickListener() {
        @Override
        public void onClick(View v) {

            if (policy.getAdapter().getCount() > 0) {

                Integer pos;
                pos = getPositions(policy.getSelectedItem().toString());

                if (policyList != null) {
                    if (Objects.equals(SelectedPolicy, " ")) {
                        SelectedPolicy = company.getSelectedItem().toString();
                    }
                }
                switch (company.getSelectedItem().toString()) {
                    case "UIC":
                        interestId = interest.getSelectedItem().toString();
                        companyId = "UIC";
                        transID = transId_list.get(pos);
                        break;
                    case "UICTAK":
                        interestId = interest.getSelectedItem().toString();
                        companyId = "UICTAK";
                        transID = transId_list.get(pos);
                        break;
                    case "SPI":
                        interestId = interest.getSelectedItem().toString();
                        companyId = "SPI";
                        transID = transId_list.get(pos);
                        break;
                    case "SPITAK":
                        interestId = interest.getSelectedItem().toString();
                        companyId = "SPITAK";
                        transID = transId_list.get(pos);
                        break;
                    default:
                        break;
                }

                Intent intent = new Intent(PolicySelection.this, TakePicture.class);

                intent.putExtra("INTERESTID", interestId);
                intent.putExtra("COMPANYID", companyId);
                intent.putExtra("TRANSID", transID);
                intent.putExtra("UserName", username);
                intent.putExtra("Password", password);
                intent.putExtra("ClaimID", "");
                intent.putExtra("OP", "UNDERWRITING");

                startActivity(intent);

            } else {
                Toast.makeText(PolicySelection.this, "No Policy Exists in Company! ", Toast.LENGTH_LONG).show();
            }
        }
    });

    company.setOnItemSelectedListener(new AdapterView.OnItemSelectedListener() {
        public void onItemSelected(AdapterView<?> arg0, View v, int position, long id) {
            popDeptSpinner();
            popPolicySpinner();
            popInterestSpinner();
        }

        public void onNothingSelected(AdapterView<?> arg0) {
        }
    });

    policy.setOnItemSelectedListener(new AdapterView.OnItemSelectedListener() {
        public void onItemSelected(AdapterView<?> arg0, View v, int position, long id) {
            if (policyList != null) {
                SelectedPolicy = policy.getSelectedItem().toString();
                policy.setSelection(position);
                popInterestSpinner();
            }
        }

        public void onNothingSelected(AdapterView<?> arg0) {
        }
    });

    interest.setOnItemSelectedListener(new AdapterView.OnItemSelectedListener() {
        @Override
        public void onItemSelected(AdapterView<?> adapterView, View view, int i, long l) {
            if (interestList != null) {

            }
        }

        @Override
        public void onNothingSelected(AdapterView<?> adapterView) {

        }
    });

    department.setOnItemSelectedListener(new AdapterView.OnItemSelectedListener() {
        @Override
        public void onItemSelected(AdapterView<?> adapterView, View view, int i, long l) {
            popPolicySpinner();
            popInterestSpinner();
        }

        @Override
        public void onNothingSelected(AdapterView<?> adapterView) {

        }
    });


}

How to use SaveInstanceState

@Override
public void onSaveInstanceState(Bundle outState) {//store your instance here
   outState.putString("message", "This is my message to be reloaded");
   super.onSaveInstanceState(outState);
}

@Override
public void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    if (savedInstanceState != null) {//load your instance here
        int position= savedInstanceState.getInt("InterestSpinner",0);
        spinner.setSelection(interestSpiner);
    }
}

or

@Override
protected void onRestoreInstanceState(Bundle savedInstanceState) {
    super.onRestoreInstanceState(savedInstanceState);
    int position= savedInstanceState.getInt("InterestSpinner",0);
    spinner.setSelection(interestSpiner);
}

This is too late to answer. But it may help others.

when the activity resumed, company.setOnItemSelectedListener method called and it triggers the pop methods,

  popDeptSpinner();
  popPolicySpinner();
  popInterestSpinner();

So all the spinners are reset to 0th index. So I saved the spinners selected values in member variables and again set it to spinners on above pop methods using setSelection method of spinner.

 if(!dept.isEmpty()){
      Cursor cc = (Cursor) (department .getSelectedItem());
      for (int i = 0; i < cc.getCount(); i++) {
           cc.moveToPosition(i);
           String temp = cc.getString((cc.getColumnIndex("_id")));
           if (temp.contentEquals("selected value")) {
                department .setSelection(i,false);
            }
      }
 }

The technical post webpages of this site follow the CC BY-SA 4.0 protocol. If you need to reprint, please indicate the site URL or the original address.Any question please contact:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM