我有Activity
DrawerLayout
。我在这个Fragment
xml文件的FrameLayout
中夸大了Activity
。 Xml文件包含GridView
内的LinearLayout
。
我在片段setOnItemClickListener
方法中的GridView
上应用了onActivityCreated
。
但是在这种方法上,我打电话给AsyncTask
我Activity
的班级。
因此,当我从Context
调用此AsyncTask
时,我无法收到setOnItemClickListener
。
如果可能,请给我一些建议如何做或任何替代。
我的活动
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);
}
}
答案 0 :(得分:6)
您需要使用getActivity()
替代片段基础设计中的上下文。
getActivity() Return the
Activity`此片段目前与。
Android文档: http://developer.android.com/reference/android/app/Fragment.html#getActivity%28%29
((MainActivity)getActivity())可以转换为您的Activity。
答案 1 :(得分:2)
有办法获取上下文:
如果您处于活动:
this;//will call your activity's context
getApplicationContext();//will get the whole application context
如果你在片段:
getActivity();//will call the activity context
如果你在内部班级中获得context
。 {strong>片段中的Asynctask
:
Fragment_class_name.this.getActivity();//explicitly get the reference of your fragment and call the context
如果你在内部班级中获得context
。 活动中的Asynctask
:
Activity_class_name.this;//explicitly get the reference of your activity context
修改强>
改变这一点:
startActivity(intent);
到此:
context.startActivity(intent);
答案 2 :(得分:1)
创建private Context mContext
;
mContext=getActivity();
现在您可以使用mContext
代替getActivity()
;