[英]Android Spinner Selected Item get changes on start of next activity
在我的应用程序中,我在一个活动中使用了多个微调器,一切正常,但是当我根据当前活动中选定的微调器项目启动另一项活动时,所有微调器选定的项目都会自行更改其“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) {
}
});
}
如何使用
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);
}
这已经来不及回答了。 但它可能会帮助其他人。
当活动恢复时,company.setOnItemSelectedListener 方法被调用并触发 pop 方法,
popDeptSpinner();
popPolicySpinner();
popInterestSpinner();
所以所有的微调器都被重置为第 0 个索引。 因此,我将微调器选择的值保存在成员变量中,并使用微调器的 setSelection 方法再次将其设置为上述 pop 方法上的微调器。
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);
}
}
}
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.