【发布时间】:2015-03-24 09:36:07
【问题描述】:
我有两个activities,主要有一个text field和两个buttons,用户可以在text field中输入文字。
点击添加button时,文字会添加到一些ArrayList中。
单击“在列表中显示”按钮时,应打开一个带有自己片段的新活动,并显示包含用户输入的名称的listview。
我使用了ArrayAdapter,效果很好。当我在列表活动中并单击设备的 后退按钮 时,一切正常,ArrayList 中的数据不会丢失。
如果我再次单击在列表中显示,我将找到我第一次输入的旧数据。但是,如果我点击设备屏幕左上角 Android 提供的 后退图标,ArrayList 变为空,当我点击在列表中显示时,listview 显示为空。
这里是主要的活动代码,
public class MainActivity extends ActionBarActivity {
String LOG_TAG = this.getClass().getSimpleName();
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
final ArrayList<String> itemList= new ArrayList<String>();
final EditText text = (EditText) findViewById(R.id.text_field);
text.setHint("Enter name here");
Button addButton = (Button) findViewById(R.id.add_button);
Button showButton = (Button) findViewById(R.id.show_button);
addButton.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View view) {
String name= text.getText().toString();
itemList.add(name);
if (itemList.size()==1){
Toast.makeText(getApplicationContext(), "one", Toast.LENGTH_SHORT).show();
}
Toast.makeText(getApplicationContext(), "name has been added to the list", Toast.LENGTH_SHORT).show();
}
});
showButton.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View view) {
Intent intent = new Intent (getApplicationContext(), ListActivity.class);
intent.putExtra("list", itemList);
startActivity(intent);
}
});
}//end oncreate
这是ListActivity及其片段代码,
public class ListActivity extends ActionBarActivity {
static ArrayList <String> itemList;
String LOG_TAG = this.getClass().getSimpleName();
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
itemList= getIntent().getStringArrayListExtra("list");
setContentView(R.layout.list_activity);
if (savedInstanceState==null){
getSupportFragmentManager().beginTransaction().add(R.id.container, new list()).commit();
}
}
public static class list extends Fragment {
@Override
public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) {
View rootView = inflater.inflate(R.layout.fragment_main, container,false);
ListView listView = (ListView) rootView.findViewById(R.id.list);
ArrayAdapter <String> adapter= new ArrayAdapter<String>(getActivity(),R.layout.fragment_main, R.id.row, itemList);
listView.setAdapter(adapter);
return rootView;
}
}
}
谁能告诉我为什么会这样?我该如何解决这个问题?
感谢任何帮助。
非常感谢。
【问题讨论】:
-
您的列表正在清除,我认为问题是当您单击操作栏后退按钮时,主要活动被再次调用或再次创建。您的列表中没有任何内容。
-
你是如何实现从 ListActivity 到 MainActivity 的导航的?
-
@Jitain 谢谢你的回答,你能告诉我如何解决这个问题吗?
-
@dit 我没有实现从 ListActivity 到 MainActivity 的任何自定义导航,因为这将使用后退按钮执行。对于从 MainActivity 到 ListActivity 的导航,我传递了一个包含 ArrayList 的意图
-
@Karthika 提供的答案很好,但可能会导致大型应用程序出现内存泄漏。而是您可以做的,使您的主要活动成为单一实例或将您的旧活动置于前台。
标签: android listview android-fragments android-arrayadapter android-lifecycle