0

リスト項目ごとに TextView を含むリスト ビューがあります。listView の onItemClick で写真を撮る必要があります。ACTION_IMAGE_CAPTURE インテントの onActivityResult と listview の更新で、結果の別のアクティビティを開始します。私が直面している問題は、2 番目のアクティビティからアクティビティ 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
    }
}
4

1 に答える 1

1

ここでテキスト ビューのコンテンツを更新していますが、リスト ビューのアダプターをサポートするデータは更新していません。これは、アクティビティが表示に戻ったとき (2 回目以降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();
}
于 2013-11-04T21:39:30.540 に答える