【问题标题】:ListView Items get reset onActivityResult from 2 different activitiesListView 项目从 2 个不同的活动中重置 onActivityResult
【发布时间】:2013-11-15 13:30:02
【问题描述】:

我有一个列表视图,其中包含每个列表项的 TextView。我需要在listView的onItemClick上拍照。 ACTION_IMAGE_CAPTURE 意图的 onActivityResult 并更新 listview ,我开始另一个活动以获得结果。 我面临的问题是,当我从第二个活动返回活动 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
    }
}

【问题讨论】:

    标签: android listview onactivityresult


    【解决方案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();
    }
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2015-01-24
      • 2021-04-02
      • 1970-01-01
      • 2013-04-23
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多