在这种情况下如何从片段中获取上下文?
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.
}
});
希望对您有所帮助!
我已经在我的应用程序中使用 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.
}
});
希望对您有所帮助!