2

這很奇怪,因爲昨天這段代碼正在工作,但不是今天。我很確定我沒有改變任何東西。ArrayList從另一個活動回來後變得清晰

事情是,我有一個空的ArrayList在第一次。然後我打電話給另一個活動,這個活動將支持前一個活動,並將一個String添加到ArrayList中。這個ArrayList的內容被用來填充一個ListView。

問題是我每次啓動新的Activity並返回一個新的String時,我的ArrayList都是空的,所以我只看到ListView上返回的最後一個String。

我嘗試了一些關於onSaveInstanceState,但它沒有幫助。有任何想法嗎?謝謝。

ArrayList<String> rules = new ArrayList<String>(); 

@Override 
protected void onCreate(Bundle savedInstanceState) { 
    super.onCreate(savedInstanceState); 
    setContentView(R.layout.activity_add_filters); 

    myList = (ListView) findViewById(R.id.listFilters);  

    adapter = new ArrayAdapter<String>(this, android.R.layout.simple_list_item_1, rules); 

    myList.setAdapter(adapter); 
} 

@Override 
protected void onActivityResult(int requestCode, int resultCode, Intent data){ 

    if(requestCode == REQUEST_CODE_0 && resultCode == RESULT_OK){ 
     String aux = data.getExtras().getString(S.RULE); 

     rules.add(aux); 
     // here rules.size() is always 1   
     adapter.notifyDataSetChanged(); 
    } 
} 

編輯: 我請從一個簡單方法的其他活動,此代碼

Intent i = new Intent(this, ActivityAddRule.class);  
startActivityForResult(i, S.REQUEST_CODE_0); 

我從第二活動從另一個方法返回數據是這樣的:

Intent i = new Intent(); 
    String rule = someOperations(); 
    i.putExtra(S.RULE, rule); 
    setResult(RESULT_OK, i); 
+0

您可以顯示您調用其他活動的代碼部分,以及從第二個活動返回數據的位置嗎? – Neoh

+0

此代碼沒問題,但請向我展示開始第二個活動的代碼。我認爲你在完成當前活動時啓動第二個活動,這就是爲什麼列表onCreate()被調用並且列表大小始終爲1 –

+1

從我的猜測來看,返回結果不一定是調用的。你確定它在第二個活動開始時必須返回一個非空字符串嗎? – Neoh

回答

0

你的代碼看起來不錯。確保每當第二個活動開始時總是調用setResult(RESULT_OK, i)

相關問題