0

MainActivityがあるListViewと想像してみてくださいArrayAdapter。に属するビューではMainActivity、データを直接更新します。たとえば、私のPageAdapterクラスでは:

@Override
public void finishUpdate(View arg0) {
    ViewPager vp = (ViewPager) arg0;
    if (vp.getCurrentItem() != this.current_item){
        this.current_item = vp.getCurrentItem();
        ContentStatus status;
        switch(vp.getCurrentItem()){
        case(0): 
            status = ContentStatus.NOTINTERESTING;
            break;
        case(2): 
            status = ContentStatus.INTERESTING;
            break;
        default: 
            status = ContentStatus.ACTIVE;
        }
        MainActivity.content.setItemStatus(content.identifier, status);
        final Activity act = (Activity) this.context;
        ArrayAdapter adapter = (ArrayAdapter) ((ListView) act.findViewById(R.id.view_sequence)).getAdapter();
        adapter.notifyDataSetChanged();
    }
}

MainActivityユーザーが他のアクティビティから一部のデータを変更してから閉じてMainActivityに戻る場合は、のビューを再描画する必要があるため、から開いて同じデータを使用する別のアクティビティでこのコードを再現する必要がありMainActivityます。バリアントとして、ActivityonResume()メソッドを使用して、データにバインドされているすべてのビューを更新する必要がありますか?

4

2 に答える 2

1

簡単な解決策の 1 つは、データが変更されたことをアダプターに通知することです。最初のアクティビティに戻ると、この方法でビューが更新されます。だからあなたのMainActivity

@Override
protected void onActivityResult(int requestCode, int resultCode, Intent data) {
    super.onActivityResult(requestCode, resultCode, data);
    ((AdapterYouAreUsing) listView.getAdapter()).notifyDataSetChanged();
}

メソッドを使用して2番目のアクティビティを開始すると仮定しますstartActivityForResult()notifyDataSetChanged()または、電話をかける必要がありますonResume()

于 2012-11-07T20:44:19.163 に答える
1

データへのバインディングを持つすべてのビューを更新するには、アクティビティの onResume メソッドを使用する必要がありますか?

簡潔な答え?はい - アクティビティが一時停止および再開されるたびにアクティビティのビュー ステートが変更される可能性がある場合は、再開時にそれらすべてを更新するのが理にかなっています。これは、「Android のやり方」に沿ったものです。2 つのアクティビティは、何らかの方法で同じデータを操作しない限り、互いに影響を与えるべきではありません。Fragment同じデータを扱っている場合は、代わりに2 番目のアクティビティを作成することを検討してください。そうすれば、そのデータのビットに関連するすべての操作が、複数のフラグメントを持つ単一のアクティビティに関連付けられます。

于 2012-11-07T20:33:39.073 に答える