另一个Activity的Fragment中没有Context

时间:2014-06-25 04:51:11

标签: android android-fragments android-asynctask android-gridview

我有Activity DrawerLayout。我在这个Fragment xml文件的FrameLayout中夸大了Activity。 Xml文件包含GridView内的LinearLayout。 我在片段setOnItemClickListener方法中的GridView上应用了onActivityCreated。 但是在这种方法上,我打电话给AsyncTaskActivity的班级。 因此,当我从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);

    }           
}

3 个答案:

答案 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();