0

我正在尝试做一些非常基本的事情,但似乎无法让它发挥作用。

我有 aViewPager并且正在使用 aFragmentPagerAdapter用片段填充它。我总是有 3 个片段(称它们为 A、B、C),片段 CI 上有一个简单的ListView. 每当用户单击该 ListView 上的一个项目时,我想向 ViewPager 添加一个新片段(片段 D),它将显示与该列表项相关的详细信息。

如果用户返回片段 C,他们可以单击另一个列表项,片段 D 的内容应该更新为其他详细信息。

这是 PageAdapter 的代码:

public class TopPagerAdapter extends FragmentPagerAdapter {

    private final ArrayList<Fragment> fragments = new ArrayList<Fragment>();

    public TopPagerAdapter(FragmentManager fm) {
        super(fm);

        fragments.add(0, new FragmentA());
        fragments.add(1, new FragmentB());
        fragments.add(2, new FragmentC());
    }

    @Override
    public Fragment getItem(int position) {
        return fragments.get(position);
    }

    @Override
    public int getCount() {
        return fragments.size();
    }

    @Override
    public CharSequence getPageTitle(int position) {
        return null;
    }

    public void addFragmentD(FragmentD frag) {
        fragments.add(3, frag);
        notifyDataSetChanged();
    }

    public void removeFragmentD() {
        fragments.remove(3);
        notifyDataSetChanged();
    }
}

这就是它的使用方式(当用户单击片段 C 中的列表项时):

    rowView.setOnClickListener(new OnClickListener() {

                    @Override
                    public void onClick(View v) {
                        FragmentD frag = new FragmentD();

                        Bundle args = new Bundle();
                        args.putString("name", mName.getText().toString());
                        frag.setArguments(args);

                        adapter.addFragmentD(frag);
                    }
});

这是 Fragment D 的实际代码(它所做的只是获取传递给它的包并显示它):

public class FragmentD extends Fragment {

    private Context mContext;
    private TextView mName;

    @Override
    public void onAttach(Activity activity) {
        super.onAttach(activity);
        this.mContext = activity;
    }

    @Override
    public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) {
        View view = inflater.inflate(R.layout.fragment_d, container, false);

        mName=  (TextView) view.findViewById(R.id.name);

        String name = (String) getArguments().get("name");
        mName.setText(name);

        return view;
    }

}

最终结果是 FragmentD 被正确添加,它显示了通过 Bundle 传递给它的正确信息,但它只在第一次工作。如果我返回 FragmentC 并单击另一个列表项,则会显示相同的 FragmentD,即使我正在创建 FragmentD 的新实例,它的onCreateView方法也不会被调用。就好像它留在记忆中,永远不会被删除。

任何想法如何使这项工作?谢谢。

4

0 回答 0