相关疑难解决方法(0)

add(),replace()和addToBackStack()之间的区别

调用这些方法的主要区别是什么:

fragmentTransaction.addToBackStack(name);
fragmentTransaction.replace(containerViewId, fragment, tag);
fragmentTransaction.add(containerViewId, fragment, tag);
Run Code Online (Sandbox Code Playgroud)

替换已存在的片段,将片段添加到活动状态,并向后台堆栈添加活动是什么意思?

其次,有findFragmentByTag(),这是否搜索由add()/ replace()方法或addToBackStack()方法添加的标记?

android android-fragments

277
推荐指数
7
解决办法
14万
查看次数

如何从活动中启动片段

我已经想从MainActivity启动我的RecipientFragment并将数据从MainActivity传递到Fragment.这是我实现的代码.但片段没有开始.

Bundle bundle = new Bundle();
bundle.putString(ParseConstants.KEY_FILE_TYPE, fileType);
RecipientsFragment keyfile = new RecipientsFragment();
keyfile.setArguments(bundle);
Fragment newFragment = new RecipientsFragment();
FragmentTransaction transaction = getFragmentManager().beginTransaction();
transaction.commit();
Run Code Online (Sandbox Code Playgroud)

我还想知道如何传递intent.setData并在Fragment中获取该数据.目前我有以下代码:

RecipientFragment

mMediaUri = getActivity().getIntent().getData();
Run Code Online (Sandbox Code Playgroud)

主要活动

Intent recipientsIntent = new Intent(this, RecipientsFragment.class);
        recipientsIntent.setData(mMediaUri);
Run Code Online (Sandbox Code Playgroud)

android android-fragments

9
推荐指数
4
解决办法
7万
查看次数

恢复上一个片段onBackPressed()?

我有一个HomeFragment按钮,点击时调用以下内容:

Fragment frag = new CustFragment();
FragmentManager fragmentManager = getFragmentManager();
fragmentManager.beginTransaction().replace(R.id.home_container, frag).commit();
Run Code Online (Sandbox Code Playgroud)

然后在我的FragmentActivity上面提到的碎片,我有:

@Override
public void onBackPressed() {

    getFragmentManager().popBackStack();
    super.onBackPressed();

}
Run Code Online (Sandbox Code Playgroud)

这就是我尝试过的,但如果我在frag片段上并按下后退按钮,它就不会回到最后一个片段(HomeFragment).相反,它会尝试返回上一个Activity,但由于没有(即之前的活动已经finish()调用过),它只会转到Android主屏幕.

我究竟做错了什么?

PS:如果我不清楚,只需在下面评论,我会尽力澄清.

java android android-fragments android-fragmentactivity

5
推荐指数
1
解决办法
1万
查看次数