【问题标题】:Android Spinner Selected Item get changes on start of next activityAndroid Spinner Selected Item 在下一个活动开始时获取更改
【发布时间】:2017-03-03 11:57:14
【问题描述】:

在我的应用程序中,我在一项活动中使用了多个微调器,一切正常,但是当我根据当前活动中选定的微调器项目启动另一项活动时,所有微调器选定项目的“0”索引都会发生变化本身的价值。当我从下一个活动返回到带有微调器的活动时(即活动恢复时),其选定值设置为“0”索引。如何阻止微调器在开始另一个活动时更改其选定项目的这种行为。

onSavedInstanceStateMethod 用于保存微调器值的索引

 @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());
}

这是我在将一些字符串放入意图后调用另一个活动的方式

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

这是我的一个微调器 onItemChangeListener() 方法`

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

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

这是我的 onCreate 方法

 @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) {

        }
    });


}

【问题讨论】:

  • 请输入代码sn-p
  • 发布您在其中添加微调器的活动代码。你在那个活动上有 onResume() 吗?
  • @Rajesh Kushvaha 代码有点长,无法在此处发布。我的实际问题是,当我运行另一个活动时,微调器项目选择的项目会回到其初始状态
  • @Zaki Pathan 我目前没有使用 onResume()。我认为恢复 Spinners 选择的项目在下一个活动开始时不应该改变没有任何问题。
  • 我们明白这一点。您对该活动有 onResume() 吗?只需发布您的微调器代码和 onResume()。仅将受影响的代码发布到微调器

标签: java android


【解决方案1】:

如何使用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);
    }
}

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

【讨论】:

  • 我已经尝试过你的答案,它没有用。当我的活动恢复时,它不会在恢复时进入 onCreate() 。那么我应该如何在 onResume 方法中使用 if (savedInstanceState) 块呢?
  • 放一些您的活动代码,以便我识别您的问题!
  • 我已经编辑了我的问题并添加了一些块,请查看它们
  • 您添加的代码不足以检查您的问题,请同时添加 oncreate 和 on resume 方法
  • 我没有使用 onResume() 方法我正在发布我的 onCreate()
【解决方案2】:

回答太晚了。但它可能会帮助其他人。

当活动恢复时,company.setOnItemSelectedListener方法被调用并触发pop方法,

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

所以所有微调器都重置为第 0 个索引。所以我将微调器选择的值保存在成员变量中,并使用微调器的 setSelection 方法再次将其设置为上述弹出方法上的微调器。

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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-06-07
    • 2020-10-21
    • 1970-01-01
    • 2015-02-24
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多