【发布时间】:2016-10-17 09:16:22
【问题描述】:
ActivityB --> 服务类 --> 在ActivityC中填充ListView(如下图,没有片段)---> ActivityD
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
SharedPreferences pref = getApplicationContext().getSharedPreferences("MyPref", 0);
setLocale(pref.getString("myLocale", null));
setTitle(R.string.title_activity_choose_number);
setContentView(R.layout.activity_choose_number1);
Toolbar toolbar = (Toolbar) findViewById(R.id.toolbar);
setSupportActionBar(toolbar);
getSupportActionBar().setDisplayHomeAsUpEnabled(true);
if(savedInstanceState != null ) {
mobileNumbersList = savedInstanceState.getStringArrayList("mobileNumbers");
}
mobileNumbersList = getIntent().getStringArrayListExtra("mobileNumbers");
mobileNumberAdapter = new ArrayAdapter<String>(this,
R.layout.secnumsinglechoice,
mobileNumbersList);
numberListView = (ListView) findViewById(R.id.listViewNumberList);
numberListView.setAdapter(numberAdapter);
numberListView.setOnItemClickListener(new AdapterView.OnItemClickListener() {
@Override
public void onItemClick(AdapterView<?> parent, View view, int position, long id) {
String numberChosen = numberAdapter.getItem(position);
Intent passNumberIntent = new Intent(getBaseContext(), US.class).
putExtra(Intent.EXTRA_TEXT, numberChosen);
startActivity(passNumberIntent);
}
});
}
现在,当在 ActivityD 中按下返回按钮到 ActivityC 时,我收到空指针错误。我知道原因是因为这一次,我没有从 ActivityD 和 ListView 传递意图,适配器,数据全部为空。
所以当我搜索如何保存状态时,我遇到了 saveInstanceState、onRestoreInstance 和 onSaveInstance。但我仍然无法解决这个问题。 ActivityC 没有片段。
【问题讨论】:
-
saveInstanceState 是为了在后台返回时恢复活动数据,它与前进或后退导航无关,如果您的活动需要来自上一个活动的数据,您应该将其存储在一个类字段中并检查如果它在尝试读取意图数据之前设置。
-
/你所说的活动数据是什么意思?这里发生的问题是当我从 ActivityD 导航到 ActivityC 时,我丢失了活动 C 数据。类字段你的意思是像 Intent ????
-
类字段是直接在您的类上声明的变量,将您的 ActivityC 数据存储在 ActivityC 上的字段中,以便您可以在需要时恢复它。
-
@Nanoc 是的,类变量 tick 就像一个魅力。 stackoverflow.com/a/29229401/3705478 谢谢。 “静态”的力量:)
-
但是创建一个类级别的静态变量,它会显示一个警告,即类级别的静态是内存泄漏。它还说安全问题。但它是一个警告。我应该担心吗?
标签: android listview android-fragments android-adapter