如何在Android Studio中的onCreate之外的其他方法中获取应用程序的上下文?

时间:2015-05-26 14:18:38

标签: android android-studio android-asynctask

我有一个异步任务,最终创建参数email,about。异步任务位于onCreate方法中,此CustomListAdapter也是如此。我想在onPostExecute的asyncTask中从onCreate移动CustomListAdapter。我的问题是this表示应用程序的上下文。当我在onPostExecute中移动它时,它不再获得该上下文。我尝试用getApplicationContext()activityName.this.getApplicationContext替换它,但它不起作用,因为它期望应用程序的上下文。我找到了这个Static way to get 'Context' on Android?,但由于某些原因我无法在清单中定义名称。我可以在asyncTask的onPostExecute方法中使用哪种获取应用程序上下文的方法?或者我应该以上下文作为参数来制作Asynck任务?

CustomListAdapter adapter=new CustomListAdapter(this, email,about);
                list=(ListView)findViewById(R.id.list);


 list.setAdapter(adapter);

            list.setOnItemClickListener(new AdapterView.OnItemClickListener() {

                @Override
                public void onItemClick(AdapterView<?> parent, View view,
                                        int position, long id) {
                    // TODO Auto-generated method stub
                    String Slecteditem= email.get(position);
                    Toast.makeText(getApplicationContext(), Slecteditem, Toast.LENGTH_SHORT).show();

                }
            });

2 个答案:

答案 0 :(得分:7)

如果您的活动名称是MyActivity,您可以随时使用MyActivity.this获取其上下文

答案 1 :(得分:1)

您可以在Activity的构造函数中传递CustomAysncTask组件的上下文,如下面的代码段所示,并使用它。但是要经常检查null

MyActivity activity
public CustomAsycTask(MyActivity activity) {
   this.activity=activity;
}

更新:Tomer Shemesh指出

private WeakReference<MyActivity> activity = null;

public CustomAsycTask(MyActivity activity) {
    activity= new WeakReference<MyActivity>(activity);
}

并访问它:

final MyActivity iActivity = activity.get();