0

したがって、擬似コードでは次のようになります。

class Example {
    private ExampleState state;
    private List<ExampleState> states;
    public Example() {
        state = new ExampleState(parameters);
        CustomAdapter = new CustomAdapter(context, state);
    }

    public someMethod() {
        state = states.get(states.size() - 1);  
        cellAdapter.notifyDataSetChanged(); 
    }

}

class CustomAdapter {
    protected ExampleState state; // that's where data is

    public CustomAdapter(Context context, ExampleState state) {
        this.state = state;
    }
}

someMethod の後、CustomAdapter 状態フィールドは同じままです。そういえばまずは Example コンストラクタでオブジェクト ExampleState を作成しています。次に、それへの参照をアダプターに渡します。次に、オブジェクトを別のオブジェクトを参照するように変更しています。

そのため、someMethod の前に、Example と CustomAdapter のフィールド「state」の ID は同じでした。その後、Example のものは新しいもので、CustomAdapter のものは古いものです。参照が更新されないのはなぜですか?

4

1 に答える 1

0

これは Java が値渡しである例です。

この方法では

public someMethod() {
    state = states.get(states.size() - 1);  
    cellAdapter.notifyDataSetChanged(); 
}

に保存されている参照を変更しますstate

ただし、

class CustomAdapter {
    protected ExampleState state; // that's where data is

    public CustomAdapter(Context context, ExampleState state) {
        this.state = state;
    }
}

コンストラクターでは、参照の値のコピーが渡されましたExampleState。これは元の (古い) 値です。オブジェクトでその参照を変更しても、参照にExampleは影響しませんCustomAdapter.state

代わりに、ExampleオブジェクトをCustomAdapterコンストラクターに渡して格納し、常にそのstate参照を取得する必要があります。

于 2013-09-26T17:42:01.950 に答える