1

这是我的设置:我有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
    }
}

这是我的问题:

  1. fragmentTransaction.replace(R.id.list_container, detailFragment);错误中的行FragmentList说我无法更改容器的 ID。这是为什么?
  2. 在我将问题 #1 中的行注释掉后,细节片段加载正常并让我滑动。但是,只有一个详细片段页面包含任何数据;其余为空白。如何实现以下内容:假设我的 ListView 包含“iOS”、“Android”、“Windows”行。当我单击“iOS”时,它会显示 iOS 的详细信息片段。当我向左滑动时,我希望显示“Android”详细信息片段;然后当我再次滑动时,“Windows”详细信息片段等

谢谢!

4

0 回答 0