2013-11-04 39 views
0

我有一個列表視圖,其中包含每個列表項的TextView。我需要在listView的圖片點擊。 ACTION_IMAGE_CAPTURE意圖的onActivityResult和更新列表視圖,我開始另一個結果活動。 我面臨的問題是,當我回到活動onActivityResult從第二個活動時,我列表視圖中的所有textviews正在重置。你能幫我解決這個問題嗎? 這是我onItemClickListView項目從2個不同的活動獲取重置onActivityResult

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

而你在這裏更新文本視圖的內容,你不更新該備份的適配器列表中的數據視圖。這意味着當您的活動回到視圖中(在第二個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(); 
} 
相關問題