次のように、アプリケーションのlocale
を変更しましたプログラムで:
Resources res = context.getResources();
DisplayMetrics dm = res.getDisplayMetrics();
Android.content.res.Configuration conf = res.getConfiguration();
conf.locale = new Locale("cn");
res.updateConfiguration(conf, dm);
この後、refresh現在表示されているフラグメントのビューを新しいロケール設定で表示したいと思います。
したがって、まず現在のフラグメントを取得します(backstack
の最新のフラグメント)。
BackStackEntry latestEntry=fragMgr.getBackStackEntryAt(fragMgr.getBackStackEntryCount()-1);
String str=latestEntry.getName();
Fragment fragment=fragMgr.findFragmentByTag(str);
現在表示されているフラグメントを取得した後、refreshviewにしたいのですが、どうすればいいですか? Androidでフラグメントのビューを更新することは可能ですか?
以下のように、フラグメントを単にデタッチおよびアタッチできます
Fragment currentFragment = getFragmentManager().findFragmentByTag("FRAGMENT");
FragmentTransaction fragTransaction = getFragmentManager().beginTransaction();
fragTransaction.detach(currentFragment);
fragTransaction.attach(currentFragment);
fragTransaction.commit();
これによりビューが更新され、ロケールが変更されます
ロケールを変更すると呼び出されるリスナーを作成できます。これにより、フラグメントが削除され、フラグメントが再度追加されます。次に、新しいロケールを選択する必要があります。
私はついに解決策を見つけました! UIスレッドでビュー更新コードを実行するだけです
例-
getActivity().runOnUiThread(new Runnable() {
@Override
public void run() {
user_arrayList.add(name);
adapter.notifyDataSetChanged();
tv_total_users.setText("Total Users : "+user_arrayList.size());
}
});
ほぼ4〜5時間試行した後、最終的にこの解決策を見つけました。