9

カスタムアダプターを使用してリストビューを作成する ListFragment があります。向きを変えてスクロールするまでは問題ありません。次に、次のようになります。 いくつかの向きを変更した後の ListView

ビューホルダーをいじっていることと関係があると思いますが、現在コードにアクセスできません。

4

5 に答える 5

14

フラグメントが重複している理由は、FrameLayout を使用し、FragmentTransition.add(...) でフラグメントを追加したためです。.add() を .replace() に変更すると、古いフラグメントが削除され、新しいフラグメントが追加され、問題が解決しました。

于 2012-09-01T10:16:14.940 に答える
2

私は同様の問題を抱えており、それによると解決策を伝えています:-方向が変わるたびに、リストフラグメントの新しいインスタンスが作成されるため(oncreate()にある可能性があります)、このぼかしが発生します。リストフラグメントのインスタンスは、向きが変わると、再度追加するのではなく、そのフラグメントを置き換えます。

于 2013-04-03T13:06:53.090 に答える
0

このメソッドを含めない限り、向きを変更するとonCreateが再起動します

public void onConfigurationChanged(Configuration newConfig)
{
    super.onConfigurationChanged(newConfig);
}

これをマニフェストのアクティビティセクションに入れます

android:configChanges="orientation"
于 2012-08-30T19:24:08.343 に答える
0

私は同じ問題を抱えていました.FrameLayoutの使用が原因です.まず、フラグメントがすでにアクティビティに追加されているかどうかを確認する必要があります:

String TagName = "F";

UI を使用しないフラグメントの追加後でアクティビティからフラグメントを取得する場合は、findFragmentByTag() を使用する必要があります。「Google」 http://developer.android.com/guide/components/fragments.html#Adding

Fragement F = getFragmentManager().findFragmentByTag(TagName);

次に、チェックします

if(F == null) {
  F = new F();
  getFragmentManager()
     .beginTransaction()
     .add(R.id.container, F, TagName)
     .commit();
}

ここでの目標は、FrameLayout をコンテナーとして使用するときに問題を引き起こす構成変更中に存続するフラグメントの新しいインスタンスを追加または作成しないようにすることです。

解決策 2 (シンプル): ここで行う必要があるのは、コンテナーを ex:LinearLayout に変更することだけです。それだけです。しかし、私の意見では、フラグメントのインスタンスが複数あるため、これは最善の解決策ではありません。

この助けを願っています。

于 2016-01-20T06:10:09.187 に答える