2

昨日はこのコードが機能していましたが、今日は機能していなかったため、これは奇妙です。私は何も変わっていないと確信しています。

問題は、最初は空の ArrayList があることです。次に、ArrayList に追加する文字列を前のアクティビティに供給する別のアクティビティを呼び出します。この ArrayList のコンテンツは、ListView を埋めるために使用されます。

問題は、その新しいアクティビティを開始して新しい文字列を返すたびに、ArrayList が空になるため、最後に返された文字列が ListView に表示されることです。

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);

次のように、別のメソッドから 2 番目のアクティビティのデータを返します。

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

1 に答える 1

0

あなたのコードは問題ないようです。setResult(RESULT_OK, i)2 番目のアクティビティが開始されるたびに が常に呼び出されるようにします。

于 2013-06-20T17:32:26.783 に答える