Arraylist状态带来另一个问题抱歉。无法保存片段
我尝试过自己解决,但是我做不到。
我想从一个活动中的一个片段的Arraylist保存状态。基本上,这是一个JSON,由PHP脚本在ListFragment中填充List。然后,点击的项目从点击的项目发送名称和详细信息。
最后,当用户点击按钮“添加到购物车”时,这些数据将在第三个片段中的Arraylist处于同一个活动状态。
代码:
PedidosFragment.java
package com.example.waitersoriginal;
*some imports*
public class PedidosFragment extends ListFragment{
public ArrayList<HashMap<String, String>> listaPedidos;
private static final String TAG_NM = "NOME";
private static final String TAG_DS = "DESCR";
ListAdapter adapter2;
public PedidosFragment(){}
@Override public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState)
{
//abc = savedInstanceState;
super.onCreate(savedInstanceState);
restore(savedInstanceState);
listaPedidos = new ArrayList<HashMap<String, String>>();
adapter2 = new SimpleAdapter(getActivity(), listaPedidos,
R.layout.list_item,
new String[] { TAG_NM, TAG_DS},
new int[] { R.id.name, R.id.pid});
setListAdapter(adapter2);
return inflater.inflate(R.layout.pedidos_fragment, container, false);
}
void criaArray(String nomeProd, String descrProd) {
HashMap<String, String> map3 = new HashMap<String, String>();
map3.put(TAG_NM, nomeProd);
map3.put(TAG_DS, descrProd);
listaPedidos.add(map3);
//getListView();
((BaseAdapter) adapter2).notifyDataSetChanged();
}
@Override
public void onSaveInstanceState(Bundle outState) {
super.onSaveInstanceState(outState);
outState.putSerializable("listaPedidos", listaPedidos);
}
private void restore(Bundle savedInstanceState) {
if (savedInstanceState != null) {
listaPedidos = (ArrayList<HashMap<String,String>>) savedInstanceState.getSerializable("listaPedidos");
}
}
}
当我离开的实际活动,并再次输入,ArrayList中已经没有了。我究竟做错了什么 ?
编辑:
更改onCreateView与给出的建议是:
public PedidosFragment(){}
@Override public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState)
{
//abc = savedInstanceState;
super.onCreate(savedInstanceState);
listaPedidos = new ArrayList<HashMap<String, String>>();
restore(savedInstanceState);
adapter2 = new SimpleAdapter(getActivity(), listaPedidos,
R.layout.list_item,
new String[] { TAG_NM, TAG_DS},
new int[] { R.id.name, R.id.pid});
setListAdapter(adapter2);
return inflater.inflate(R.layout.pedidos_fragment, container, false);
}
你离开的意思是什么?按下后退按钮? – ezcoding 2014-10-26 17:11:42
的确如此,@DuZi .. – xxxxxx 2014-10-26 17:14:00
如果你想在你的activity上调用'onDestroyed'后仍然保留这些项目,你必须将它们保存在设备上。您可以使用首选项,sqlite数据库或对象序列化来执行此操作。 – ezcoding 2014-10-26 17:16:36