web-dev-qa-db-ja.com

フラグメントのビューを更新することは可能ですか?

次のように、アプリケーションの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でフラグメントのビューを更新することは可能ですか?

21
Leem.fin

以下のように、フラグメントを単にデタッチおよびアタッチできます

    Fragment currentFragment = getFragmentManager().findFragmentByTag("FRAGMENT");
    FragmentTransaction fragTransaction = getFragmentManager().beginTransaction();
    fragTransaction.detach(currentFragment);
    fragTransaction.attach(currentFragment);
    fragTransaction.commit();

これによりビューが更新され、ロケールが変更されます

35
ZeeShaN AbbAs

ロケールを変更すると呼び出されるリスナーを作成できます。これにより、フラグメントが削除され、フラグメントが再度追加されます。次に、新しいロケールを選択する必要があります。

2
Mimminito

私はついに解決策を見つけました! 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時間試行した後、最終的にこの解決策を見つけました。

0
Mayank Agarwal