调用这些方法的主要区别是什么:
fragmentTransaction.addToBackStack(name);
fragmentTransaction.replace(containerViewId, fragment, tag);
fragmentTransaction.add(containerViewId, fragment, tag);
Run Code Online (Sandbox Code Playgroud)
替换已存在的片段,将片段添加到活动状态,并向后台堆栈添加活动是什么意思?
其次,有findFragmentByTag(),这是否搜索由add()/ replace()方法或addToBackStack()方法添加的标记?
我已经想从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) 我有一个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:如果我不清楚,只需在下面评论,我会尽力澄清.