1

選択した言語に応じて動的に変更できるを含むListViewフッターがあります。別の言語を選択すると、アイテム が更新されます。ViewTextView
ListView

mBaseAdapter.updateItems(items);

BaseAdapter :

public void updateItems(List<Map.Entry<Integer, String>> items) {
        mItemsResIdList = new ArrayList<>(items);
        notifyDataSetChanged();
}

フッターを更新するために、私はこれを行っていました:

mListViewFooter.invalidate();

これは機能しませんでした。テキストは変更されませんでした。ただし、を次のものに置き換えると機能invalidate();します。

((TextView)mListViewFooter.findViewById(R.id.myTextView)).setText(R.string.myCopy);

: 私のListView要素はTextViews、選択した言語に従って翻訳されたものであり、数を増減することもできます。Viewフッターが変更されることはありません。テキストが翻訳されるように更新したいだけです(正しいvalue-(lang)/strings.xmlが選択されます)。

私の質問は、最初のアプローチが機能しないのはなぜですか? 私が考えることができる唯一の説明は、 は再度invalidate();呼び出さずsetText()、 を再描画するだけだということViewです。ListViewアダプターが再度読み込まgetView()れる場所で再度呼び出すため、で機能しましTextViewsた。この仮定は正しいですか?

ありがとう。

4

1 に答える 1

1

この動作は想定されたものです。任意のビューの invalidate() を呼び出すと、既にあるコンテンツが再描画されるだけで、変更がキャンバスにない限り更新されません。
言語を変更すると、footerView は通知されないため、コンテンツを変更できます。したがって、strings.xml からコンテンツを取得しようとすると、正しい言語が取得されます。テキストを再度設定することが、その方法です。

于 2015-06-24T06:32:37.827 に答える