54

XML レイアウトを膨らませるフラグメントがあります。私の要件は、アクティビティが再開されたときに、フラグメント内のすべてのビューのテキスト サイズを更新することです。私は試した

    fragment.getView().invalidate();

それは仕事をしていないようでした。私も試しました

    fragment.getView().requestLayout();

どちらも機能しませんでした。

別のアクティビティでは、同じことを行う必要がある ListFragment があります。私は試した

    listfragment.getListView().invalidate();

これはトリックを行い、リストビューを更新し、その中のすべてのアイテムを再描画しました.

なぜ一方が機能するのに他方が機能しないのかわかりません。

また、フラグメント トランザクションを開始し、現在のフラグメントを新しいフラグメントに置き換えることを推奨している人々も見てきました。

  1. フラグメントに含まれるビューのテキストを更新するだけでよいのに、まったく新しいフラグメントを作成して現在のフラグメントを置き換える必要があるのはなぜですか。

  2. フラグメント トランザクション メソッドを使用すると、アクティビティのレイアウト xml でフラグメントを定義できなくなり、プログラムでフラグメントを正しい位置に挿入する必要があります。

これに対する簡単なアプローチはありますか?

4

8 に答える 8

8

detach().detach()サポート ライブラリ アップデート 25.1.0 (それより前の可能性があります) の後、動作しません。このソリューションは、更新後に正常に機能します。

getSupportFragmentManager()
    .beginTransaction()
    .detach(oldFragment)
    .commitNowAllowingStateLoss();

getSupportFragmentManager()
    .beginTransaction()
    .attach(oldFragment)
    .commitAllowingStateLoss();
于 2016-12-22T09:35:19.190 に答える
1

これは、フラグメント内から私にとってはうまくいきました:

Fragment frg = null;
Class fragmentClass;
fragmentClass = MainFragment.class;

try {
    frg = (android.support.v4.app.Fragment)     
    fragmentClass.newInstance();
} catch(Exception ex) {
    ex.printStackTrace();
}

getFragmentManager()
    .beginTransaction()
    .replace(R.id.flContent, frg)
    .commit();
于 2017-02-04T13:18:23.977 に答える