自定义列表适配器中的 getApplicationContext()

getApplicationContext() in a Custom List-Adapter

我的代码在我的 Fragment Class 中有效,但在我的列表适配器中无效:

BackgroundWorker backgroundWorker = new BackgroundWorker(getActivity().getApplicationContext());
backgroundWorker.execute();

当我需要将此代码放入我的列表适配器时,'getApplicationContext' 部分是 "errored"。如何解决此问题并在我的列表适配器中使用此代码。 ('Tab2'中的class),

您可以将 ApplicationContext 的引用传递给列表适配器:

 new ListAdapter(getActivity().getApplicationContext(), anotherArgs);

顺便说一下,您可以从任何视图 class 获取 Context,我确定您的适配器可以访问父视图 class 以创建行项目视图。

你可以

  • context 传递给您的 adapter's 构造函数 OR,

  • views 中提取 context 用于您的 adpater

For inflating layouts in an Activity , you need Activity context not ApplicationContext !!

您必须在适配器的构造函数中将 activity 上下文作为参数传递,并将其分配给本地上下文变量。

例如:

 public class CustomAdapter extends ArrayAdapter<YourModelclass> {

        private ArrayList<YourModelclass> list;

        Context mContext;

 public CustomAdapter(ArrayList<YourModelclass> list, Context context) {
            this.list = list;
            this.mContext=context;

        }

        @Override
        public View getView(int position, View convertView, ViewGroup parent) { }

在上面的代码中,您可以使用本地上下文,然后访问任何方法。

这是因为,

Fragment 总是映射到 activity 因此,GetActivity 方法可在 Fragment class 中访问。

GetActivity returns 一个 Activity 上下文并且此上下文可以访问 GetApplicationContext 方法

但是在您的适配器中,GetActivity 没有任何意义,因为它没有绑定到 activity 或者它的父级也不是。

希望对您有所帮助!!!

您可以通过两种方式做到这一点

  1. context 从您的 activity 或片段 ,

    传递给您的 Adapter's 构造函数
  2. views 中提取 context,用于 adpater。您可以直接从视图中询问上下文,例如 viewObject.getContext().getApplicationContext()

另请记住,如果您需要扩充视图,您将需要 Activity 的上下文,因为应用程序上下文在那里不起作用。每个上下文(Activity、应用程序、baseContext 等)都有不同的职责并提供不同的设施。您必须根据需要进行选择。 这也是非常基本的事情。您必须学习 android 组件中的基本上下文用法。