Android 上下文在另一个活动的片段中不可用
我有一项关于抽屉布置的活动。我在这个活动xml文件的FrameLayout中膨胀一个片段。Xml文件包含LinearLayout中的GridView。 我在activitycreated方法的片段中对这个GridView应用setOnItemClickListener。 但在这个方法中,我调用的是活动的AsyncTask类。 因此,当我从setOnItemClickListener调用此AsyncTask时,我没有获得上下文。 如果可能的话,请给我一些建议如何做或其他选择 我的活动 在片段库设计中,您需要使用getActivity作为上下文的替代 getActivity Return theActivity`此片段当前与关联 Android文档: MainActivity getActivity可用于您的活动 在片段库设计中,您需要使用getActivity作为上下文的替代 getActivity Return theActivity`此片段当前与关联 Android文档: MainActivity getActivity可用于您的活动Android 上下文在另一个活动的片段中不可用,android,android-fragments,android-asynctask,android-gridview,Android,Android Fragments,Android Asynctask,Android Gridview,我有一项关于抽屉布置的活动。我在这个活动xml文件的FrameLayout中膨胀一个片段。Xml文件包含LinearLayout中的GridView。 我在activitycreated方法的片段中对这个GridView应用setOnItemClickListener。 但在这个方法中,我调用的是活动的AsyncTask类。 因此,当我从setOnItemClickListener调用此AsyncTask时,我没有获得上下文。 如果可能的话,请给我一些建议如何做或其他选择 我的活动 在片段库设计
有几种方法可以获取上下文: 如果您正在参加活动: 如果您在片段中: 如果在片段中获取内部类ex.Asynctask中的上下文: 如果要在活动中的内部类例如Asynctask中获取上下文: 编辑: 更改此项: 为此:
有几种方法可以获取上下文: 如果您正在参加活动: 如果您在片段中: 如果在片段中获取内部类ex.Asynctask中的上下文: 如果要在活动中的内部类例如Asynctask中获取上下文: 编辑: 更改此项: 为此: 创建私有上下文mContext 现在您可以使用mContext而不是getActivity 创建私有上下文mContext
现在您可以使用mContext而不是getActivity 在Fragement for Context中,您可以使用getActivity来使用活动的上下文。我可以在Fragment中访问上下文,但当我调用AsyncTask时,在AsyncTask中我无法获取上下文。在Fragement for Context中发布您的活动主类您可以使用getActivity,使用活动的上下文。我可以访问片段中的上下文,但当我调用AsyncTask时,在AsyncTask内部我无法获取上下文。发布活动主classI可以访问片段中的上下文,但当我调用AsyncTask时,在AsyncTask内部我无法获取上下文。您可以只传递getActivity而不是ConetText将工作。我从getActivity获取片段中的上下文。但我在片段中调用AsyncTask调用,并且AsyncTask类在MainActivity类中定义。现在在这个AsyncTask中,我无法创建任何视图或无法实例化数据库。@ved将活动的上下文传递给AsyncTask的构造函数并使用它为什么不将上下文传递给Asyntask?您可以使用上下文本身创建视图和数据库,所以您可以更改AsyntTask。使用上下文而不是活动。我可以访问片段中的上下文,但是当我调用AsyncTask时,在AsyncTask内部我无法获取上下文。您可以只传递getActivity而不是ConetText,这将起作用。我从getActivity获取片段中的上下文。但是我在片段中调用AsyncTask调用,并且AsyncTask类在中定义主要活动课。现在在这个AsyncTask中,我无法创建任何视图或无法实例化数据库。@ved将活动的上下文传递给AsyncTask的构造函数并使用它为什么不将上下文传递给Asyntask?您可以使用上下文本身创建视图和数据库,所以您可以更改AsyntTask。使用上下文而不是activity.when我传递Fragment_class_name.this.getActivity;在AsyncTask构造函数中,它的工作是视图初始化,但在AsyncTask的PostExecute中,调用StartActivityContent时,我得到的是NullPointerException。调试器显示mAction=null@ved发布你的asynctask,我来看看。我已经添加了我的活动类,其中包含asynctask类。现在,当我传递Fragment\u class\u name.this.getActivity时,它在startActivityContent.com上给出了NullPointerException;在AsyncTask构造函数中,它的工作是视图初始化,但在AsyncTask的PostExecute中,调用StartActivityContent时,我得到的是NullPointerException。调试器显示mAction=null@ved发布你的asynctask,我来看看。我已经添加了我的活动类,其中包含asynctask类。现在它在StartActivityContent上给出了NullPointerException。
class GetExamList extends AsyncTask<String, String, String>{
Context context;
public GetExamList(Context mContext){
context=mContext;
}
@Override
protected void onPreExecute() {
super.onPreExecute();
pDialog = new ProgressDialog(context);
pDialog.setMessage("Fetching Test List");
pDialog.setIndeterminate(false);
pDialog.setCancelable(true);
pDialog.show();
}
@Override
protected String doInBackground(String... params) {
exam_id=1;
List<NameValuePair> list = new ArrayList<NameValuePair>();
list.add(new BasicNameValuePair("exam_id", exam_id+""));
JSONObject json = jsonParser.makeHttpRequest(url_exam_list,
"POST", list);
// check for success tag
try {
int success = json.getInt("flag");
Log.d("flag", success+"");
if (success == 1) {
//fetch exam list
JSONArray elist=json.getJSONArray("testdata");
Log.d("flag=1", "in try of HomeExamList");
for (int i = 0; i < elist.length(); i++) {
JSONObject obj=elist.getJSONObject(i);
int testId=obj.getInt("test_id");
String testName=obj.getString("test_name");
Log.d("elist test_id", testId+"");
Log.d("elist test_name", testName);
Test test=new Test();
test.setExam_id(exam_id);
test.setTest_id(testId);
test.setTest_name(testName);
Dao dao=new Dao(context);
dao.open();
boolean check=dao.chechTestIdInTestList(testId);
if(!check) dao.insertTestList(test);
dao.close();
}
} else {
// failed to create product
Toast.makeText(getApplicationContext(), "unsuccessful", 2000).show();
}
} catch (JSONException e) {
e.printStackTrace();
}
return null;
}
@Override
protected void onPostExecute(String result) {
// TODO Auto-generated method stub
super.onPostExecute(result);
pDialog.dismiss();
Intent intent = new Intent(context, ExamList.class);
intent.putExtra("eid", exam_id);
startActivity(intent);
}
}
this;//will call your activity's context
getApplicationContext();//will get the whole application context
getActivity();//will call the activity context
Fragment_class_name.this.getActivity();//explicitly get the reference of your fragment and call the context
Activity_class_name.this;//explicitly get the reference of your activity context
startActivity(intent);
context.startActivity(intent);
mContext=getActivity();