从回收器适配器替换片段

时间:2016-11-14 21:08:01

标签: android android-fragments

我正在开发一个Android应用程序,将listview更改为回收站视图。

问题

使用示例项目,我在适配器视图中处理对recylcer的点击。 但是,从这个适配器,我有很多时间调用一个新的片段。

    itemView.setOnClickListener(new View.OnClickListener() {
        @Override
        public void onClick(View view) {
            //         android.app.FragmentManager fragmentManager = getFragmentManager();
            //        FragmentManager fragmentManager = ((Activity) context).getFragmentManager();

            //       FragmentManager manager = this.getSupportFragmentManager();
            //       FragmentManager manager= getContext().getFragmentManager();

            //       FragmentManager fragmentManager = newsAdapter().getActivity().getFragmentManager();
            //       getActivity().getFragmentManager();
            Log.i("RecyclerViewItemClic", String.valueOf(getLayoutPosition()));

            Log.i("RecyclerViewItemClic", personName.getText().toString());
            String idnum = String.valueOf(personName.getText());
            Log.i("RecyclerViewItemClic", idnum);
            Log.i("RecyclerViewItemClic", personAge.getText().toString());

            if (personName.getText().toString() .equals("1")) {
            /*
                fragmentManager.beginTransaction()
                        .replace(R.id.content_frame
                                ,new numNumbersFrag())
                        .commit();


            */
                ((FragmentActivity) context).getFragmentManager().beginTransaction()
                        .replace(R.id.content_frame, new numNumbersFrag())
                        .commit();


            }
        }

以上是我尝试导致错误的代码

  

尝试调用虚拟方法'android.app.FragmentManager   android.support.v4.app.FragmentActivity.getFragmentManager()'上   null object

如果我尝试使用getSupportFragmentManager(),或者导入片段而不是版本4,我也会得到同样的错误。

任何帮助都将不胜感激。

谢谢

3 个答案:

答案 0 :(得分:7)

变化

    it('assignments and declarations', () => {

    testCases.forEach(function (testCase) {
        const slx = fs.readFileSync(testDirectory + 'slx/' + testCase.slx, 'utf-8');

        const document = compiler.parse(slx);

        const lmsGenerator = new LMSGenerator(document);
        const lms = lmsGenerator.generate();

        const expected = fs.readFileSync(testDirectory + 'lms/' + testCase.lms, 'utf-8');

        expect(expected).toBe(lms);
    });
});

((FragmentActivity) context).getFragmentManager().beginTransaction()
                    .replace(R.id.content_frame, new numNumbersFrag())
                    .commit();

因为,在

((FragmentActivity) view.getContext()).getFragmentManager().beginTransaction()
                    .replace(R.id.content_frame, new numNumbersFrag())
                    .commit();

view.getContext()将返回不为null的上下文。

谢谢,

答案 1 :(得分:1)

这对您也有帮助:

@Override
public void onClick(View v) {
    View view = v.getRootView();
    Activity activity = (Activity) view.getContext();
    activity.getFragmentManager().beginTransaction().replace(R.id.FrameLayout, fragment).commit();
}

答案 2 :(得分:0)

在您的Adapter类上尝试一下。

((FragmentActivity)context).getSupportFragmentManager()
                        .beginTransaction()
                        .replace(R.id.frame_container, new YourFragment().addToBackStack("crop_type")
                        .commit();