ListView项从2个不同的活动中重置onActivityResult

时间:2013-11-04 20:00:52

标签: android listview onactivityresult

我有一个列表视图,其中包含每个列表项的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
    }
}

1 个答案:

答案 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();
}