我有一个带有 DrawerLayout
的 Activity
。我正在这个 Activity
xml 文件的 FrameLayout
中膨胀一个 Fragment
。 Xml 文件包含 LinearLayout
内的 GridView
。
我在 fragment onActivityCreated
方法内的此 GridView
上应用了 setOnItemClickListener
。
但是在这个方法中,我调用了我的 Activity
的 AsyncTask
类。
因此,当我从我的 setOnItemClickListener
调用此 AsyncTask
时,我没有获得 Context
。
如果可能,请给我一些建议如何去做或任何替代方案。
我的 Activity
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);
}
}
最佳答案
您需要使用 getActivity()
替代 fragment 基础设计中的上下文。
getActivity() 返回此 fragment 当前关联的
Activity。
安卓文档: http://developer.android.com/reference/android/app/Fragment.html#getActivity%28%29
((MainActivity) getActivity()) is castable to your Activity.
关于android - 上下文在另一个 Activity 的 fragment 中不可用,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24400409/