1

クラスを使用してFrameLayout(内にRelativeLayout)を追加/削除FragmentsFragmentTransactionます。MyFrameLayoutは元々その親と左揃えであり、FrameLayout.offsetLeftAndRight(int offset)メソッドによって水平方向にオフセットされることもあります。

オフセットがあり、フラグメントトランザクションをコミットしてFrameLayoutに追加するFragmentと(つまりFragmentTransaction.add(R.id.myFrameLayout, myNewFragment).commit())、FrameLayoutオフセットを無視して元の場所にジャンプして戻ることがわかりました。

なぜこれが起こっているのか、そしてFrameLayoutそれに追加するときに自分自身の再配置を回避する方法を知っている人はFragmentいますか?

注: Honeycombの前に作業するために行っていることが必要なためoffsetLeftAndRight(int offset)、または他の方法ではなく、この方法を使用しています。setTranslationX(float translationX)

4

1 に答える 1

0

次のように、オフセット位置の追跡を維持し、ビューのonLayout(boolean changed, int left, int top, int right, int bottom)メソッドをオーバーライドして、このメソッドが呼び出されるたびにビューを適切にオフセットすることで解決しました。

@Override
protected void onLayout(boolean changed, int left, int top, int right, int bottom)
{
  super.onLayout(changed, left, top, right, bottom);

  if (changed)
  {
    offsetLeftAndRight(myHorizontalOffset);
    offsetTopAndBottom(myVerticalOffset);
  }
}
于 2012-07-27T13:32:40.077 に答える