我在Android应用程序中有一个列表视图的自定义列表适配器
我刚刚建议扩展Applicaion类以存储一些全局变量
设置或获取变量时我必须传递上下文
下面是CustomListView
的getView函数我尝试设置一个全局变量(在onClickListener中),方法是将它与我在意图之后成功使用的相同上下文一起传递。
但是我收到以下错误
04-08 22:11:17.534 21919-21919/com.example.alex.camerascan4 E/AndroidRuntime﹕ FATAL EXCEPTION: main
Process: com.example.alex.camerascan4, PID: 21919
java.lang.ClassCastException: com.example.alex.camerascan4.CategoryActivity cannot be cast to com.example.alex.camerascan4.MyApplication
at com.example.alex.camerascan4.CustomListView$1.onClick(CustomListView.java:74)
我也尝试将view.getContext方法用于可用的视图,但它仍无法正常工作
public View getView(final int position, final View convertView, final ViewGroup parent) {
// TODO Auto-generated method stub
Holder holder=new Holder();
final View rowView;
rowView = inflater.inflate(R.layout.activity_category_listitem, null);
holder.tv=(TextView) rowView.findViewById(R.id.textView1);
holder.img=(ImageView) rowView.findViewById(R.id.imageView1);
holder.tv.setText(mDataset.get(position));
holder.img.setImageResource(R.drawable.camera);
rowView.setOnClickListener(new OnClickListener() {
@Override
public void onClick(View v) {
// TODO Auto-generated method stub
//Toast.makeText(context, "You Clicked "+mDataset.get(position), Toast.LENGTH_LONG).show();
((MyApplication) context).setRequestID(mDatamap.get(position));
// login success and move to main Activity here.
Intent myIntent = new Intent(v.getContext(), DocumentActivity.class);
((Activity) context).startActivity(myIntent);
}
});
return rowView;
}
答案 0 :(得分:1)
访问MyApplication
对象的最简单方法就是这样 -
public class MyApplication extends Application {
public static MyApplication context = null;
@Override
public void onCreate() {
super.onCreate();
context = this;
}
}
现在,无论您想要调用MyApplication
类的方法,都可以直接调用 -
MyApplication.context.setRequestID(mDatamap.get(position));
您不必将任何上下文强制转换为Application
上下文以便使用它。您可以在应用程序的任何位置使用上述内容。