这是我的设置:我有MainActivity
以下代码:
public class MainActivity extends FragmentActivity {
FragmentList listFragment;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.layout);
listFragment = new FragmentList();
FragmentManager fragmentManager = getSupportFragmentManager();
FragmentTransaction fragmentTransaction = fragmentManager.beginTransaction();
fragmentTransaction.add(R.id.list_container, listFragment);
fragmentTransaction.commit();
}
}
然后我有FragmentList
, 这是一个ListView
片段和FragmentDetail
, 这是选择特定ListView
行时显示的片段。
这是代码片段FragmentList
:
public class FragmentList extends Fragment {
private ListView list;
private FragmentDetail detailFragment;
private long detailId;
private ViewPager mPager;
private PagerAdapter mPagerAdapter;
@Override
public void onActivityCreated(Bundle savedInstanceState) {
super.onActivityCreated(savedInstanceState);
// ListView gets set via an adapter
list.setOnItemClickListener(new AdapterView.OnItemClickListener() {
@Override
public void onItemClick(AdapterView<?> parent, View view, int position, long id) {
detailId = id;
mPager = (ViewPager)getActivity().findViewById(R.id.pager);
mPagerAdapter = new ScreenSlidePagerAdapter(getFragmentManager());
mPager.setAdapter(mPagerAdapter);
final FragmentManager fragmentManager = getActivity().getSupportFragmentManager();
final FragmentTransaction fragmentTransaction = fragmentManager.beginTransaction();
fragmentTransaction.replace(R.id.list_container, detailFragment);
fragmentTransaction.commit();
}
});
}
private class ScreenSlidePagerAdapter extends FragmentStatePagerAdapter {
public ScreenSlidePagerAdapter(FragmentManager fm) {
super(fm);
}
@Override
public Fragment getItem(int position) {
detailFragment = new FragmentDetail();
Bundle mBundle = new Bundle();
mBundle.putLong("detailId", detailId);
detailFragment.setArguments(mBundle);
return detailFragment;
}
@Override
public int getCount() {
return 5;
}
}
}
并且FragmentDetail
:
public class FragmentDetail extends Fragment {
private long id;
@Override
public View onCreateView(LayoutInflater inflater, ViewGroup container,
Bundle savedInstanceState) {
ViewGroup rootView = (ViewGroup) inflater.inflate(R.layout.activity_view, container, false);
return rootView;
}
@Override
public void onActivityCreated(Bundle savedInstanceState) {
super.onActivityCreated(savedInstanceState);
Bundle bundle = getArguments();
id = bundle.getLong("detailId");
// Set views based on id
}
}
这是我的问题:
fragmentTransaction.replace(R.id.list_container, detailFragment);
错误中的行FragmentList
说我无法更改容器的 ID。这是为什么?- 在我将问题 #1 中的行注释掉后,细节片段加载正常并让我滑动。但是,只有一个详细片段页面包含任何数据;其余为空白。如何实现以下内容:假设我的 ListView 包含“iOS”、“Android”、“Windows”行。当我单击“iOS”时,它会显示 iOS 的详细信息片段。当我向左滑动时,我希望显示“Android”详细信息片段;然后当我再次滑动时,“Windows”详细信息片段等
谢谢!