如何在适配器 class 中使用我的全局变量? Android
How can I use my global variable inside an Adapter class? Android
您好,我正在尝试使用 Global Variable
传递一个值。我创建了一个 class 文件,扩展到 Application
,然后将其添加到我的 Manifest
。
public class MyApplication extends Application {}
之后我创建了一个扩展到 BaseExpandableListAdapter
的 Adapter 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
中使用此数据,它不是静态的,它会根据所选项目更改其值。
提前谢谢你。
我不太确定你想要达到什么目的,但无论你在做什么,我都觉得很老套!根据回答您的问题,getApplication()
需要上下文,所以当您这样做时
((MyApplication) getActivity().getApplication())
您实际上是在使用活动的 (getActivity()) 上下文。而且你不能在 Adapter
class 中调用 getActivity()
。尝试将 activity 的上下文从 activity 传递到构造函数中的适配器,例如
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();
}
您的 class 中需要有一个构造函数来扩展 BaseExpandableListAdapter。定义的构造函数应接收 Context 类型的参数。这是示例 -
private Context mContext;
public YourExpandableListAdapter(Context context) {
mContext = context;
Integer my_id = ((MyApplication) context.getApplicationContext()()).getMy_id();
}
现在在您的 activity -
中创建一个这样的实例
YourExpandableListAdapter ob = new YourExpandableListAdapter(this);
这应该有效。
对我来说,以上都不起作用。试试这个:
((MyApplication) context.getApplicationContext()).getMy_id();
您好,我正在尝试使用 Global Variable
传递一个值。我创建了一个 class 文件,扩展到 Application
,然后将其添加到我的 Manifest
。
public class MyApplication extends Application {}
之后我创建了一个扩展到 BaseExpandableListAdapter
的 Adapter 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
中使用此数据,它不是静态的,它会根据所选项目更改其值。
提前谢谢你。
我不太确定你想要达到什么目的,但无论你在做什么,我都觉得很老套!根据回答您的问题,getApplication()
需要上下文,所以当您这样做时
((MyApplication) getActivity().getApplication())
您实际上是在使用活动的 (getActivity()) 上下文。而且你不能在 Adapter
class 中调用 getActivity()
。尝试将 activity 的上下文从 activity 传递到构造函数中的适配器,例如
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();
}
您的 class 中需要有一个构造函数来扩展 BaseExpandableListAdapter。定义的构造函数应接收 Context 类型的参数。这是示例 -
private Context mContext;
public YourExpandableListAdapter(Context context) {
mContext = context;
Integer my_id = ((MyApplication) context.getApplicationContext()()).getMy_id();
}
现在在您的 activity -
中创建一个这样的实例YourExpandableListAdapter ob = new YourExpandableListAdapter(this);
这应该有效。
对我来说,以上都不起作用。试试这个:
((MyApplication) context.getApplicationContext()).getMy_id();