在这种情况下如何从片段中获取上下文?

How to get context from fragment under this circumstance?

我已经在我的应用程序中使用 activity 实现了这个东西, 请参考下面的图片 link “http://imgur.com/LuErJjY

在第一部分你可以看到 context=PerformanceActivity@4015

但在第二部分它是空的

我使用的代码是

IN ACTIVITY:

viewHolder.nextReview.setOnClickListener(new View.OnClickListener() {
            public void onClick(View v) {
                int d=v.getId();
                ((PerformanceActivity)context).performReview(v.getId());
            }
        });

在片段中:

NOTE: PerformanceFragment pf;

viewHolder.nextReview.setId(resData.get(position).getTestID());
        viewHolder.nextReview.setOnClickListener(new View.OnClickListener() {
            public void onClick(View v) {
                int d=v.getId();
                ((PerformanceFragment)pf).performReview_frag(v.getId());
            }
        });

这两种方法都是存在于列表视图适配器中的方法。在 Activity 中它工作正常,但在片段中却不行。

两个适配器的链接:

https://pastee.org/28chw - Fragment's Adapter https://pastee.org/nw8rr - Fragment

https://pastee.org/wxepy -Activity's Adapter

在第二部分中,如果您的片段 PerformanceFragment 与您的 activity PerformanceActivity

关联,则使用 getActivity() 方法
viewHolder.nextReview.setId(resData.get(position).getTestID());
    viewHolder.nextReview.setOnClickListener(new View.OnClickListener() {
        public void onClick(View v) {
            int d=v.getId();
            /* (getActivity()). no need to use content if 
            performReview_frag() is present in PerformanceFragment fragment*/
            // this will call performReview_frag() method
            performReview_frag(v.getId());
        }
    });

否则,

您可以使用 getBaseContext() 方法获取正确的上下文

最后这对我有用 -

PerformanceFragmentAdapter adapter = new PerformanceFragmentAdapter(context,rsuData,device,this);

并将其作为

添加到适配器
private PerformanceFragment pf;
    public PerformanceFragmentAdapter(Context conte, ArrayList<ResultData> rData,
                              int device, PerformanceFragment pp) {
        super();
        context = conte;
        resData = rData;
        size = device;
        pf=pp;
    }

猜猜@ursgtm 是对的。 Context c=getActivity();this 关键字

之间仍然存在混淆

PerformanceFragmentAdapter class :

 PerformanceFragment pf;

您只是在创建一个没有实例的对象,并且将该对象用作上下文,并且您没有向 pf 分配任何内容。

而不是删除 pf,并传递您从构造函数获得的上下文:

viewHolder.nextReview.setOnClickListener(new View.OnClickListener() {
            public void onClick(View v) {
                int d=v.getId();
           //Replace ((PerformanceFragment)pf) with context 
                context.performReview_frag(v.getId()); //you obtained context from contractor. 
            }
        }); 

希望对您有所帮助!