我在我的应用中使用了recyclerview。我想在点击图片视图时启动一个片段。但我不知道该怎么做。我也想在启动片段时放入数据。我知道如何使用以下代码启动活动。但是我怎么能以相同的方式开始片段?
已编辑的代码
FragmentManager fm = getSupportFragmentManager();
FragmentTransaction ft = fm.beginTransaction();
ft.replace(R.id.layoutContent, frag);
ft.commit();
答案 0 :(得分:0)
碎片无法启动,必须将它们添加到容器中
碎片并不意味着它们自己起作用,它们需要一个封闭的活动。
具有以下布局:
[...]
<FrameLayout android:id="@+id/container"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:background="?android:attr/detailsElementBackground" />
[...]
您可以将片段放入其中:
FragmentTransaction transaction = getSupportFragmentManager().beginTransaction();
transaction.replace(R.id.container, newFragment);
transaction.commit();
通过使用Bundle并按如下方式创建片段,将参数传递给片段:
TestFragment newFragment = new TestFragment();
Bundle args = new Bundle();
args.putString("Hello world!");
newFragment.setArguments(args);
这必须在交易之前完成。
有关详细信息,请参阅official documentation
关于已编辑代码的注意事项:您必须从FrameLayout所属的Activity内部调用事务。
或者使用相当脏的解决方法:
在Main:
public class Main extends Activity{
public static Main currentInstance;
public void onCreate(Bundle boomerang){
currentInstance = this;
}
}
在播放列表活动中,然后使用Main.currentInstance.getSupportFragmentManager()
等
但我不推荐它。
答案 1 :(得分:0)
要启动片段,您需要使用片段管理器。
YourFragment yourFragmentInstance = YourFragment.newInstance("Hello", 12);
FragmentTransaction fragmentTransaction = getFragmentManager().beginTransaction();
//Fragment is hosted by an activity, and the activity must have a layout
//or a container for the fragment to be nested in, in this case it will be
//a FrameLayout with an id fragment_container
fragmentTransaction.replace(R.id.fragment_container, yourFragmentInstance);
fragmentTransaction.commit();
你可以像这样传递你的片段的参数:
public class YourFragment extends Fragment {
public static YourFragment newInstance(String paramOne, int paramTwo) {
YourFragment fragment = new YourFragment();
Bundle b = new Bundle();
//set params/arguments for fragment
b.putString("param_one", paramOne);
b.putInt("param_two", paramTwo);
fragment.setArguments(b);
return fragment;
}
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
//Get the params you passed in
Bundle bundle = getArguments();
String paramOne = bundle.getString("param_one");
String paramTwo = bundle.getInt("param_two");
}
}
注意:我没有测试过这段代码。这只是一个想法:)