android - 如何在 GridView 中的图像之间滑动?

标签 android gridview android-fragments android-viewpager custom-adapter

我有什么是 fragment 之间的许多选项卡..每个 fragment 都有 GridView ,每次我们在 GridView 中按下图像时,它应该在新 Activity 中全屏显示..我想在中添加滑动功能这个全屏图像,因此用户可以在 GridView 中的其他图像之间左右滑动......但我一直在全屏 Activity 中看到错误,并且日志给出了 NULL POINTER EXCEPTION!请帮助..

首先是 fragment 类之一的代码:

public class KitchenBlinds extends Fragment {
    public Integer[] mThumbIds = {
            R.drawable.kit_1, R.drawable.kit_2,
            R.drawable.kit_3, R.drawable.kit_4,
            R.drawable.kit_5, R.drawable.kit_6,
            R.drawable.kit_7, R.drawable.kit_8,
            R.drawable.kit_9, R.drawable.kit_10,
            R.drawable.kit_11, R.drawable.kit_12,
            R.drawable.kit_13, R.drawable.kit_14,
            R.drawable.kit_15
    };
    @Override
    public View onCreateView(LayoutInflater inflater, ViewGroup container,
            Bundle savedInstanceState) {

        View view = inflater.inflate(R.layout.activity_kitchen_blinds, container, false);

    GridView gridview = (GridView)view.findViewById(R.id.grid_view);
      try{
        // Instance of ImageAdapter Class
            gridview.setAdapter(new ImageAdapter(getActivity(), mThumbIds)); 
      } catch (OutOfMemoryError E) { 
        E.printStackTrace();
    }


        /**
         * On Click event for Single Gridview Item
         * */
        gridview.setOnItemClickListener(new OnItemClickListener() {
            @Override
            public void onItemClick(AdapterView<?> parent, View v,
                    int position, long id) {

                // Sending image id to FullScreenActivity
                Intent i = new Intent(getActivity(), FullImageActivity2.class);
                // passing array index
                 i.putExtra("id", mThumbIds[position]);

                    Log.d("ID", "" + mThumbIds[position]);
                     startActivity(i);
            }   
        });


    return view;    
}


}

然后这里是 GridView 类的图像适配器代码:

    public class ImageAdapter extends BaseAdapter {
        private Context mContext;


        // Keep all Images in array
        public Integer[] mThumbIds = {};


        public ImageAdapter(Context c,Integer[] mThumbIds2){
            mContext = c;
            this.mThumbIds=mThumbIds2;
        }



        @Override
        public int getCount() {
            return mThumbIds.length;
        }

        @Override
        public Object getItem(int position) {
            return mThumbIds[position];
        }

        @Override
        public long getItemId(int position) {
            return position;
        }

        @Override
        public View getView(int position, View convertView, ViewGroup parent) {         
            ImageView imageView = new ImageView(mContext);
            imageView.setImageResource(mThumbIds[position]);
            imageView.setScaleType(ImageView.ScaleType.CENTER_CROP);
            imageView.setLayoutParams(new GridView.LayoutParams(100, 100));
            imageView.setBackgroundResource(R.layout.edit_border);
            imageView.setPadding(3, 3, 3, 3);

            return imageView;
        }
    }

这是图像寻呼机适配器的代码:

public class ImagePagerAdapter  extends PagerAdapter{
    private List<ImageView> images;

    public ImagePagerAdapter(List<ImageView> images) {
        this.images = images;
    }

    @Override
    public Object instantiateItem(ViewGroup container, int position) {
        ImageView imageView = images.get(position);
        container.addView(imageView);
        return imageView;
    }

    @Override
    public void destroyItem(ViewGroup container, int position, Object object) {
        container.removeView(images.get(position));
    }

    @Override
    public int getCount() {
        return images.size();
    }


    @Override
    public boolean isViewFromObject(View view, Object o) {
        // TODO Auto-generated method stub
          return view == o;
    }
}

最后这里是全屏 Activity 的代码,每次我选择图像时它都会崩溃:

 public class FullImageActivity2 extends Activity {


        @Override
        public void onCreate(Bundle savedInstanceState) {
            super.onCreate(savedInstanceState);
            setContentView(R.layout.activity_full_image_activity2);
     // Loop through the ids to create a list of full screen image views
        ImageAdapter imageAdapter = new ImageAdapter(this);
        List<ImageView> images = new ArrayList<ImageView>();

        for (int i = 0; i < imageAdapter.getCount(); i++) {
            ImageView imageView = new ImageView(this);
            imageView.setImageResource(imageAdapter.mThumbIds[i]);
            imageView.setScaleType(ImageView.ScaleType.FIT_XY);
            images.add(imageView);
        }

        // Finally create the adapter
        ImagePagerAdapter imagePagerAdapter = new ImagePagerAdapter(images);
        ViewPager viewPager = (ViewPager) findViewById(R.id.view_pager);
        viewPager.setAdapter(imagePagerAdapter);

        // Set the ViewPager to point to the selected image from the previous activity
        // Selected image id
        int position = getIntent().getExtras().getInt("id");
        viewPager.setCurrentItem(position);
    }
    }

我一直在这一行看到一个错误:

  ImageAdapter imageAdapter = new ImageAdapter(this);

因为我在图像适配器中配置我的构造函数以获取两个工作正常的参数,但我不知道如何在这里传递它!!! 请帮忙 !!提前谢谢...

最佳答案

好吧..我通过像这样在厨房百叶窗 Activity 中发送数组来解决这个问题:

i.putExtra("array", mThumbIds);

然后我像这样接收它并将它添加到构造函数中:

Intent i = getIntent();
Object[] s = (Object[]) getIntent().getSerializableExtra("array");
Integer[] newArray = Arrays.copyOf(s, s.length, Integer[].class);

并将其添加到构造函数中:

ImageAdapter imageAdapter = new ImageAdapter(this, newArray); 

关于android - 如何在 GridView 中的图像之间滑动?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/22452672/

相关文章:

android - 单击 fragment 中包含的 RecyclerView 中的项目以使用传递的数据打开新 Activity

java - 由于需要 READ_EXTERNAL_STORAGE 权限而崩溃,即使它在 list 中

javascript - 如果代码被篡改太多,现场的音频播放器会变得脆弱

c# - 在 Windows 8 Metro App 中对 GridView 进行分组

android - ViewPagerFragment 选项卡错误

java - 从 fragment 启动 fragment 会显示默认屏幕

android - 渲染脚本渲染比 Android 上的 OpenGL 渲染慢很多

android - 你能改变android ImageView上位图的图像色调吗?

c# - GridView 选定的行单元格值变为空

c# - 为什么我的 WPF ListView/GridView 没有虚拟化?