相关疑难解决方法(0)

如何使用以编程方式创建的内容视图向活动添加片段

我想将一个片段添加到以编程方式实现其布局的Activity.我查看了Fragment文档,但没有很多示例描述我需要的内容.这是我尝试编写的代码类型:

public class DebugExampleTwo extends Activity {

    private ExampleTwoFragment mFragment;

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        FrameLayout frame = new FrameLayout(this);
        if (savedInstanceState == null) {
            mFragment = new ExampleTwoFragment();
            FragmentTransaction ft = getFragmentManager().beginTransaction();
            ft.add(frame.getId(), mFragment).commit();
        }

        setContentView(frame);
    }
}
Run Code Online (Sandbox Code Playgroud)

...

public class ExampleTwoFragment extends Fragment {

    @Override
    public View onCreateView(LayoutInflater inflater, 
                             ViewGroup container, 
                             Bundle savedInstanceState) {
        Button button = new Button(getActivity());
        button.setText("Hello There");
        return button;
    }
}
Run Code Online (Sandbox Code Playgroud)

此代码编译但在开始时崩溃,可能是因为我FragmentTransaction.add()的错误.这样做的正确方法是什么?

android android-fragments android-3.0-honeycomb

224
推荐指数
8
解决办法
42万
查看次数

FragmentManager和FragmentTransaction到底做了什么?

我在下面有简单的代码

FragmentManager fragmentManager = getFragmentManager();
FragmentTransaction fragmentTransaction = fragmentManager.beginTransaction();
fragmentTransaction.replace(R.id.fragment_container, mFeedFragment);
fragmentTransaction.addToBackStack(null);
fragmentTransaction.commit();
Run Code Online (Sandbox Code Playgroud)

这些代码行做了什么?

android fragmenttransaction fragmentmanager fragment-backstack

49
推荐指数
2
解决办法
7万
查看次数

addToBackStack后不能使用popBackStack()

我的项目包含两个片段:

  • FragmentA:应用程序启动时默认加载的片段
  • FragmentB:替换fragmentA单击按钮完成时的操作.

这是我主视图的XML:

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:layout_width="match_parent"
    android:layout_height="match_parent">

    <fragment
        android:id="@+id/main_fragment_container"
        android:name="fragmentA"
        android:layout_width="match_parent"
        android:layout_height="match_parent">
    </fragment>

</LinearLayout>
Run Code Online (Sandbox Code Playgroud)

当我想以取代FragmentAFragmentB,我用这个代码:

FragmentTransaction fragmentTransaction = getSupportFragmentManager()
            .beginTransaction();
fragmentTransaction.addToBackStack(null);
fragmentTransaction.replace(R.id.main_fragment_container, new FragmentB());
fragmentTransaction.commit();
Run Code Online (Sandbox Code Playgroud)

这段代码工作正常.我的FragmentA被新的替换FragmentB.但是,当点击上后退按钮做的,我希望更换FragmentBFragmentA使用popBackStackImmediate().

这是我使用的代码:

if (getSupportFragmentManager().getBackStackEntryCount() > 0){
    boolean done = getFragmentManager().popBackStackImmediate();
    fragmentTransaction.commit();
}
Run Code Online (Sandbox Code Playgroud)

该函数popBackStackImmediate返回false并且FragmentB仍处于前台.

我打电话时为什么FragmentA不会替换FragmentB popBackStackImmediate?有人有想法解决我的问题吗?

提前致谢

android android-fragments

26
推荐指数
3
解决办法
4万
查看次数

Android FragmentTransaction.addToBackStack混淆

我正在研究碎片,并且在区分FragmentTransaction.replace(id, fragment, tag)FragmentTransaction.addToBackStack(tag)调用时很少感到困惑.让我们说我当前的片段是FragmentA,然后我加载了FragmentB.我希望将来,当我需要加载FragmentA时,我不必重新加载它.只需在旧状态下加载旧的.我使用了以下代码段:

public void loadFragment(Fragment fragmentB, String tag) {
    FragmentManager fm = getSupportFragmentManager();
    View fragmentContainer = findViewById(R.id.fragment_container);

    FragmentTransaction ft = fm.beginTransaction();
    ft.replace(fragmentContainer.getId(), fragmentB, tag);

    ft.addToBackStack(tag);

    ft.commit();
}
Run Code Online (Sandbox Code Playgroud)

现在我很困惑,我应该在哪里添加字符串标签?在replace()addToBackStack()或在两个电话?你能解释这两个标签位置之间的区别吗?

android android-fragments fragmenttransaction

16
推荐指数
2
解决办法
4万
查看次数