android - 上下文在另一个 Activity 的 fragment 中不可用

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

我有一个带有 DrawerLayoutActivity。我正在这个 Activity xml 文件的 FrameLayout 中膨胀一个 Fragment。 Xml 文件包含 LinearLayout 内的 GridView。 我在 fragment onActivityCreated 方法内的此 GridView 上应用了 setOnItemClickListener。 但是在这个方法中,我调用了我的 ActivityAsyncTask 类。 因此,当我从我的 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/

相关文章:

javascript - 从 Activity 中调用 javascript 函数?

android - dagger hilt android中的ActivityRetainedComponent @ActivityRetainedScope和ActivityComponent @ActivityScoped有什么区别

android - 如何在 Android 中解析复杂的 soap 对象

java - 如何使用 MuPDF 打开受密码保护的 PDF

android - 在 GoogleMaps、Android 中禁用放大镜

android - 如何创建基本 fragment 以便子 fragment 可以从它们扩展以在 OnCreateView 函数中设置适配器?

java - 如何处理 Android 中的后台任务队列?

java - 如何在一个 Activity 中切换两个 fragment ?

android - 如何在android中的asynctask中创建toast

Android AsyncTask 登录同一文件