在MainActivity中,我有一个ListView,显示如下:
[CheckBox] [TextView] [按钮]
在右上方有一个添加按钮。当我点击该按钮时,它会在列表视图中添加一个项目。
MyItem item = new MyItem(itemName);
myItemsList.add(item);
adapter.notifyDataSetChanged();
“MyItem”是pojo类,“itemName”是String值。 “myItemList”是ArrayList。
所以这个项目在ListView中完美添加但是当我再次加载活动或重新启动app时,则不应显示值。
我该如何解决这个问题?
先谢谢。
修改
这是ArrayAdapter getView 方法
public View getView(int position, View convertView, ViewGroup parent) {
ViewHolder holder = null;
MyItem cell = (MyItem) getItem(position);
LayoutInflater mInflater = (LayoutInflater) context
.getSystemService(Activity.LAYOUT_INFLATER_SERVICE);
SharedPreferences sharedPrefs = context.getSharedPreferences(
"sharedPrefs", Context.MODE_PRIVATE);
if (convertView == null) {
convertView = mInflater.inflate(R.layout.listitem, null);
holder = new ViewHolder();
holder.txtItemName = (TextView) convertView
.findViewById(R.id.tvItemName);
holder.chkItem = (CheckBox) convertView.findViewById(R.id.chkItem);
holder.chkItem
.setOnCheckedChangeListener(new CompoundButton.OnCheckedChangeListener() {
@Override
public void onCheckedChanged(CompoundButton buttonView,
boolean isChecked) {
int getPosition = (Integer) buttonView.getTag();
// Here we get the position that we have set for the
// checkbox using setTag.
itemList.get(getPosition).setSelected(
buttonView.isChecked());
editor.putBoolean("CheckValue" + getPosition,
buttonView.isChecked());
editor.commit();
// Set the value of checkbox to maintain its state.
}
});
convertView.setTag(holder);
convertView.setTag(R.id.tvItemName, holder.txtItemName);
convertView.setTag(R.id.chkItem, holder.chkItem);
} else {
holder = (ViewHolder) convertView.getTag();
}
editor = sharedPrefs.edit();
holder.chkItem.setTag(position); // This line is important.
holder.txtItemName.setText(itemList.get(position).getName());
holder.chkItem.setChecked(sharedPrefs.getBoolean("CheckValue"
+ position, false));
return convertView;
}
修改
public String[] items = new String[]{"A","B","C"};
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.main);
lvItemName = (ListView) findViewById(R.id.lvItemName);
imgAdd = (ImageView) findViewById(R.id.imgAdd);
myItemsList = new ArrayList<MyItem>();
for (int i = 0; i < items.length; i++) {
MyItem item = new MyItem(items[i]);
myItemsList.add(item);
}
adapter = new ItemAdapter(this, R.layout.listitem, myItemsList);
lvItemName.setAdapter(adapter);
lvItemName.setOnItemClickListener(this);
// ImageView Add Click
imgAdd.setOnClickListener(this);
}
@Override
public void onItemClick(AdapterView<?> parent, View view, int position,
long id) {
MyItem planet = adapter.getItem(position);
planet.toggleChecked();
ViewHolder viewHolder = (ViewHolder) view.getTag();
viewHolder.getCheckBox().setChecked(planet.isSelected());
Log.i("Checked::", "" + viewHolder.getCheckBox().isChecked());
}
答案 0 :(得分:0)
您是说在下次活动加载时不应显示新添加的项目(在列表视图中)?
假设上述内容: - 当您再次加载活动时(onCreate()被调用),理想情况下,只有您在ArrayList中加载的内容才会出现在listview中。 因此,每次重新加载活动时,请确保您的arraylist也会刷新(或重新加载)。您没有永久存储任何添加的项目。
答案 1 :(得分:0)
如果我正确理解你的问题,你指的是更普遍的问题 - 保存状态。
有多种方法可以保存您的活动状态:
如果您需要列表状态为持久性(下次启动应用程序时,您的列表将具有相同的项目),您可以覆盖onPause和onResume方法,并将数据保存在某种{{3 }}。请参阅以下代码:
@覆盖 protected void onPause(){ super.onPause(); //将ArrayList保存到持久存储 }
@覆盖 protected void onResume(){ super.onResume(); //加载您的ArrayList }
为了将Collection保存为持久数据,您应该使用集合实现persistent storage并使用SharedPreferences,或者使用SQLite表...请参阅上面关于持久存储的android链接...