gpt4 book ai didi

android - 不要在 onRestoreInstanceState 上运行函数

转载 作者:行者123 更新时间:2023-11-29 18:10:56 25 4
gpt4 key购买 nike

我正在开发一个应用程序,当您转到屏幕时,您可以从 onCreate 中创建的对话框中选择您的位置。选择位置后,它会将其写入预定义的 TextView。我遇到的一个问题是,当屏幕方向发生变化时,它会重新创建对话框,而我试图让它不触发对话框功能。

这是我在类文件中所拥有的基础知识。

  @Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);

setContentView(R.layout.emergpolice);

form_location = (TextView) findViewById(R.id.input_location);

if(form_location == null || form_location.getText().equals("")){
setLocation();
}
}

@Override
protected void onSaveInstanceState(Bundle outState){
super.onSaveInstanceState(outState);
outState.putString("LOCATION", (String)form_location.getText());
}

@Override
protected void onRestoreInstanceState(Bundle savedInstanceState){
super.onRestoreInstanceState(savedInstanceState);
form_location.setText(savedInstanceState.getString("LOCATION"));
}

public void setLocation(){
db = new DatabaseHandler(this);
db.open();
final CharSequence[] locOpt = {getString(R.string.dialog_items_current_location),getString(R.string.dialog_items_home),getString(R.string.dialog_items_enter_manually)};
AlertDialog.Builder builder = new AlertDialog.Builder(this);
builder.setTitle(getString(R.string.header_choose_location));
builder.setSingleChoiceItems(locOpt, -1, new DialogInterface.OnClickListener() {
public void onClick(DialogInterface dialog, int item){
if(locOpt[item].equals(getString(R.string.dialog_items_home))){
Cursor cur = db.userInfo();
String address = cur.getString(cur.getColumnIndex("address"));
String city = cur.getString(7);
String county = cur.getString(8);
String state = cur.getString(9);
String zip = cur.getString(10);
db.close();
form_location.setText(address + ", " + city + ", " + county + ", " + state + ", " + zip);
}
if(locOpt[item].equals(getString(R.string.dialog_items_current_location))){
Toast.makeText(getApplicationContext(), locOpt[item], Toast.LENGTH_SHORT).show();
}
dialog.cancel();
}
});
AlertDialog alert = builder.create();
alert.show();
}

而我布局中的TextView

        <TextView
android:id="@+id/input_location"
android:layout_width="wrap_content"
android:layout_below="@+id/text_location"
android:layout_height="wrap_content"
android:text="" />

就触发 setLocation() 而言,已经尝试了几种情况来检查字符串长度,无论是否为 null。当屏幕发生变化时,它会显示最初选择的位置,但仍会触发对话框。

最佳答案

您总是调用方法 setLocation,因为每次调用 ActivityonCreate 方法时都会调用 form_location.getText()。 equals("") 将为 true(因为 TextView 已重新创建(很可能您没有在布局文件中设置文本)) .

为避免这种情况,请使用 onCreate 方法的 savedInstanceState:

if (savedInstanceState == null){
// if savedInstanceState is null the activity is created for the first time
setLocation();
} else {
// if not null then the activity is recreated so restore the TextView text
form_location.setText(savedInstanceState.getString("LOCATION"));
}

关于android - 不要在 onRestoreInstanceState 上运行函数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10760904/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com