【问题标题】:How can I use my global variable inside an Adapter class? Android如何在 Adapter 类中使用我的全局变量?安卓
【发布时间】:2015-09-19 08:13:10
【问题描述】:

您好,我正在尝试使用Global Variable 传递一个值。我创建了一个类文件,将其扩展为Application,然后将其添加到我的Manifest

public class MyApplication extends Application {}

之后我创建了一个扩展为BaseExpandableListAdapterAdapter Class,我搜索了如何设置和获取我创建的全局变量并找到了这个

((MyApplication) getActivity().getApplication()).setMy_id(my_id);

并且能够得到我使用这个的价值

Integer my_id = ((MyApplication) getActivity().getApplication()).getMy_id();

在我的Fragments 中,我可以使用我的getMy_id() 方法,但是将它放在BaseExpandableListAdapter 中时,getActivity() 中出现错误。我已经尝试过使用this,但它仍然显示Cannot resolve method getApplication(),有没有其他方法可以获取我的全局变量的值。

我这样做是因为我试图将Cursor 用于我的ListView。我想创建一个Expandable ListView,其中数据来自我的数据库,而我的Cursor 有一个参数,它的WHERE 条件将使用我的全局变量中的数据。

之所以将其用作全局变量,是因为我在不同的Fragments 中使用此数据,它不是静态的,它的值取决于所选项目。

提前谢谢你。

【问题讨论】:

  • 发布一些代码并准确解释您要做什么。我不太明白。我可能是错的,因为我不知道你想在这里做什么以及为什么,但这似乎不是最佳做法。
  • 如果它是一个全局变量,为什么不将其设为静态并直接引用它。我一定是错过了什么?
  • 我无法将其设为静态,因为每当您从列表视图中单击时,id 都会发生变化,并将转到另一个列表视图,所选项目的 id 将传递给另一个列表视图。

标签: java android adapter expandablelistadapter


【解决方案1】:

您的类中需要有一个扩展 BaseExpandableListAdapter 的构造函数。定义的构造函数应该接收一个 Context 类型的参数。这是示例 -

private Context mContext;

public YourExpandableListAdapter(Context context) {
    mContext = context;
    Integer my_id = ((MyApplication) context.getApplicationContext()()).getMy_id();
}

现在在你的活动中创建一个这样的实例 -

YourExpandableListAdapter ob = new YourExpandableListAdapter(this);

这应该可行。

【讨论】:

  • 我可以在片段中使用它吗?
  • 在您的片段中,您不需要 Context 实例,因为您的片段有一个名为 getActivity() 的函数,因此可以使用它。
  • 再问一个问题,而是把 YourExpandableListAdapter ob = new YourExpandableListAdapter(this);在活动中我可以把它放在我的片段上吗?
  • 是的,您可以,但是您需要将代码更改为 - YourExpandableListAdapter ob = new YourExpandableListAdapter(getActivity());
【解决方案2】:

我不太确定你想要达到什么目标,但无论你在做什么,对我来说似乎都是 hacky!根据回答你的问题,getApplication() 需要一个上下文,所以当你这样做时

((MyApplication) getActivity().getApplication())

您实际上是在使用 activitiy 的(getActivity()) 上下文。而且您不能在 Adapter 类中调用 getActivity()。尝试将活动的上下文从活动传递到构造函数中的适配器,类似于。

MyAdapter myAdapter = new MyAdapter(this); //This line will be in your activity, and this will be the instance of your activity

你的适配器构造函数看起来像

public MyAdapter(Context context){
    //Use this context to get the application instance, something like
    Integer my_id = ((MyApplication) context.getApplication()).getMy_id();
}

【讨论】:

  • 您好,感谢您的回答。我正在尝试将 my_id 传递给我的适配器类,因为在我的适配器类中,我正在尝试在那里创建一个查询,该查询将用于填充我的可扩展列表视图。我尝试了你的建议,但我仍然遇到同样的错误。
【解决方案3】:

对我来说,以上都不起作用。试试这个:

((MyApplication) context.getApplicationContext()).getMy_id();

【讨论】:

    猜你喜欢
    • 2010-12-29
    • 1970-01-01
    • 1970-01-01
    • 2012-08-09
    • 1970-01-01
    • 1970-01-01
    • 2013-04-19
    • 1970-01-01
    相关资源
    最近更新 更多