传递上下文的问题

时间:2016-04-08 21:16:34

标签: java android listview

我在Android应用程序中有一个列表视图的自定义列表适配器

我刚刚建议扩展Applicaion类以存储一些全局变量

设置或获取变量时我必须传递上下文

下面是CustomListView

的getView函数

我尝试设置一个全局变量(在o​​nClickListener中),方法是将它与我​​在意图之后成功使用的相同上下文一起传递。

但是我收到以下错误

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;
    }

1 个答案:

答案 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上下文以便使用它。您可以在应用程序的任何位置使用上述内容。

相关问题