我有一个列表视图,其中包含每个列表项的TextView。我需要在listView的onItemClick上拍照。 ACTION_IMAGE_CAPTURE意图的onActivityResult和更新列表视图,我开始另一个结果活动。 我面临的问题是,当我从第二个活动返回活动onActivityResult时,列表视图中的所有文本视图都会重置。你能帮我解决这个问题吗? 这是我的onItemClick
public void onItemClick(AdapterView<?> arg0, View v, int index, long arg3) {
selectedIndex = index; //selectedIndex is a class level variable
Intent takePictureIntent = new Intent(MediaStore.ACTION_IMAGE_CAPTURE);
File f = createImageFile();
if (f != null) {
imageFileName = f.getAbsolutePath();
takePictureIntent.putExtra(MediaStore.EXTRA_OUTPUT, Uri.fromFile(f));
}
startActivityForResult(takePictureIntent, 1);
}
}
这是我的onActivityResult
protected void onActivityResult(int requestCode, int resultCode, Intent data) {
if (requestCode == 1 && resultCode == RESULT_OK) {
View v = listView.getChildAt(selectedIndex
- listView.getFirstVisiblePosition());
TextView textView = (TextView) v.findViewById(R.id.textView1);
int quantity = Integer
.parseInt(textView.getText().toString().trim().length() > 0 ? quantityTV
.getText().toString() : getString(R.string._0));
quantity++;
textView.setText(String.valueOf(quantity));
listViewAdapter.notifyDataSetChanged();
Intent intent = new Intent();
intent.setClass(getApplicationContext(), NotificationActivity.class);
intent.putExtra("Value1", "0");
startActivityForResult(intent, 100);
}
else if (requestCode == 100) {
// do nothing
}
}
答案 0 :(得分:1)
当您在此处更新文本视图的内容时,您不会更新支持列表视图的适配器的数据。这意味着当您的活动重新进入视图时(在第二个startActivityForResult
之后),它会使用旧数据重绘自己。
您应该更新支持适配器的数据,而不是直接更新视图。像这样的东西;你必须修改它以适合你的代码。
if (requestCode == 1 && resultCode == RESULT_OK) {
List<Integer> adapterData = listViewAdapter.getQuantities();
int quantity = adapterData.get(selectedIndex) + 1;
adapterData.set(selectedIndex, quantity);
listViewAdapter.setQuantities(adapterData);
Intent intent = new Intent();
intent.setClass(getApplicationContext(), NotificationActivity.class);
intent.putExtra("Value1", "0");
startActivityForResult(intent, 100);
}
在你的适配器中,你会有这样的东西:
public List<Integer> getQuantities() {
return mQuantities;
}
public void setQuantities(List<Integer> quantities) {
mQuantities = quantities;
notifyDataSetChanged();
}