gpt4 book ai didi

android - 如何正确替换 View 寻呼机中的 fragment ?

转载 作者:行者123 更新时间:2023-11-29 02:07:50 30 4
gpt4 key购买 nike

我的应用程序结构如下:

v4 FragmentActivity --> v4 ViewPager --> v4 Fragment
--> v4 ListFragment

我正在使用 ActionBarSherlock (我真的会推荐),Activity 的结构基于 https://github.com/JakeWharton/ActionBarSherlock/blob/master/samples/demos/src/com/actionbarsherlock/sample/demos/app/ActionBarTabsPager.java 的演示。 .因此,这两个 fragment 显示为用户的两个选项卡。

当用户单击 ListFragment 的一个元素时,我想在与列表相同的位置的 WebView 中加载一个 url。也就是说,我想用新的 WebView 替换 ListFragment(将其放在后台堆栈上)。

到目前为止,我已经尝试使用 FragmentTransaction.replace()从 Activity 。那种工作,除了两个问题:

  • ListFragment 在我旋转设备之前不显示 WebView(即重新创建 Activity )。
  • 另一个标签的内容消失了(只是一片空白)

将 ListFragment 替换为另一个 Fragment 的正确方法是什么?

最佳答案

或者,您可以使用自定义 Horizo​​ntalScrollView 而不是 ViewPager 并覆盖其 onTouchEvent 方法以获得与您获得的相同的捕捉效果一个 ViewPager,像这样:

public class MyHorizontalScrollView extends HorizontalScrollView {

public MyHorizontalScrollView(Context context) {
super(context);
}

public MyHorizontalScrollView(Context context, AttributeSet attrs) {
super(context, attrs);
}

public MyHorizontalScrollView(Context context, AttributeSet attrs, int defStyle) {
super(context, attrs, defStyle);
}

@Override
public boolean onTouchEvent(MotionEvent ev) {
switch (ev.getAction()) {
case MotionEvent.ACTION_UP:
if (mScrollable) {
View child = getChildAt(0);
if (child != null) {
final int currentX = getScrollX();
final int windowWidth = getResources().getDisplayMetrics().widthPixels;
final int totalWidth = child.getWidth();
int showingElementNumber = 1;
int i = windowWidth;
while (i < currentX && i < totalWidth) {
i+=windowWidth;
showingElementNumber++;
}

int scrollTo = 0;
if (currentX < (windowWidth * (showingElementNumber - 1) + windowWidth/2)) { // Previouses widths + half the current
scrollTo = windowWidth * (showingElementNumber - 1);
} else {
scrollTo = windowWidth * showingElementNumber + marginSize;
}
smoothScrollTo(scrollTo, 0);
return false;

}
}
return super.onTouchEvent(ev);
default:
return super.onTouchEvent(ev);
}
}
}

然后您可以在其中添加两个 Fragments 并使用带有 addToBackStack() 的常规 FragmentTransaction 来获得您想要的内容。

注意:如果您想使用上面的代码,只需确保您的 fragment 与整个屏幕的宽度相同,并记住您的结构应该类似于

MyHorizontalScrollView > LinearLayout > YourFragment1
> YourFragment2

关于android - 如何正确替换 View 寻呼机中的 fragment ?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9031318/

30 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com