单击网格视图中的某个项目时,我试图从光标获取_id字段,相同的代码在列表视图中工作正常,但在这里似乎不起作用:

等级:

CurAdapter Cur;
GridView grid;


onCreate:

Cursor mCur = dbHelper.contactsQuery();
grid = (GridView)rootView.findViewById(R.id.gridview);
Cur = new CurAdapter(getActivity(), mCur,0);
grid.setAdapter(Cur);
grid.setTextFilterEnabled(true);


点击:

grid.setOnItemClickListener(new OnItemClickListener() {
            @Override
            public void onItemClick(AdapterView<?> parent, View view,int position, long id) {

                System.out.println(position);
                System.out.println(id);

                Cursor cursor = (Cursor) grid.getItemAtPosition(position);

            }
        });


我的CustomAdapter:

private class CurAdapter extends CursorAdapter{

        public CurAdapter(Context context, Cursor c, int flags) {

            super(context, c, flags);

        }



        @Override
        public void bindView(View view, Context context, Cursor cursor) {

            TextView tv = (TextView) view.findViewById(R.id.item_text);
            tv.setTypeface(helv_light);
            final RoundedImageView iv = (RoundedImageView) view.findViewById(R.id.item_image);

            String name = (cursor.getString(cursor.getColumnIndexOrThrow("Name")));
            image = cursor.getString(cursor.getColumnIndexOrThrow("imageUri"));
            String isAdhoc = (cursor.getString(cursor.getColumnIndexOrThrow("isAdhoc")));

            if(isAdhoc.equals("1")){
                boolean check = false;
                String frName = null;
                Cursor mCur = dbHelper.friendsName(name);
                if(mCur != null && mCur.moveToFirst()){
                    do{
                        frName = mCur.getString(mCur.getColumnIndex("FriendsName"));
                        if(frName != null){


                            if(frName.equalsIgnoreCase(selfName)){
                                check = false;
                            }else {

                                check = true;


                            }


                        }

                    }while (mCur.moveToNext());
                }

                if(check){
                    name = name+" "+"("+frName+"'s"+" pet)";
                }

            }


            tv.setText(name);


            if((image.contains("jpg") || image.contains("png")) && image.contains("adhoc") != true){

                image = "file://"+image;

            }

            final DisplayImageOptions options = new DisplayImageOptions.Builder()
            .showImageOnLoading(R.drawable.icon_default)
            .showImageForEmptyUri(R.drawable.icon_default)
            .showImageOnFail(R.drawable.icon_default)
            .resetViewBeforeLoading(true)
            .cacheInMemory(true) // default
            .cacheOnDisk(true) // default
            .build();

            ImageLoader.getInstance().displayImage(image, iv, options);

        }
        @Override
        public View newView(Context context, Cursor cursor, ViewGroup parent) {

            View view = LayoutInflater.from(context).inflate(R.layout.grid_layout, null);

            return view;

        }


        public long getItemId(int position) {

            return position;
        }

        public Object getItem(int position) {
            return position;
        }

    }


我的问题:

11-10 14:51:47.989: E/AndroidRuntime(11194): java.lang.ClassCastException: java.lang.Integer cannot be cast to android.database.Cursor
11-10 14:51:47.989: E/AndroidRuntime(11194):    at com.example.FragmentTab3$1.onItemClick(FragmentTab3.java:125)

最佳答案

您正在获取ClassCastException,因为您覆盖了getItem

 public Object getItem(int position) {
        return position;
 }


在您的情况下,它返回的是int而不是游标。您可以删除它并使用getItem的父实现(应该在位置返回Cursor

08-18 18:12
查看更多