Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/android/212.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Android GridView中的缩略图副本_Android_Gridview_Thumbnails - Fatal编程技术网

Android GridView中的缩略图副本

Android GridView中的缩略图副本,android,gridview,thumbnails,Android,Gridview,Thumbnails,我正在寻找一些帮助来解决为什么GridView没有显示正确数量的缩略图,而是在组中显示大量重复的缩略图的问题?当我上下滚动缩略图列表并返回顶部时,图像的顺序一直在变化 谁知道原因是什么以及如何解决?也许有更好的方法来创建缩略图的GridView?还是我的手机?我使用三星Young和安卓2.3.3版。我读到HTC也有类似的问题 我真的很想得到一些帮助,以便能够继续我的工作。谢谢 代码如下: public class MainActivity extends Activity { Cursor c

我正在寻找一些帮助来解决为什么GridView没有显示正确数量的缩略图,而是在组中显示大量重复的缩略图的问题?当我上下滚动缩略图列表并返回顶部时,图像的顺序一直在变化

谁知道原因是什么以及如何解决?也许有更好的方法来创建缩略图的GridView?还是我的手机?我使用三星Young和安卓2.3.3版。我读到HTC也有类似的问题

我真的很想得到一些帮助,以便能够继续我的工作。谢谢

代码如下:

public class MainActivity extends Activity {

Cursor cursor;
int indexColumn;

@Override
public void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_main);

    // Array for the columns to access
    String[] projection = {MediaStore.Images.Thumbnails._ID};

    // Cursor object
    cursor = managedQuery(MediaStore.Images.Thumbnails.EXTERNAL_CONTENT_URI, projection, null, null, MediaStore.Images.Thumbnails.IMAGE_ID);

    // Number of columns
    indexColumn = cursor.getColumnIndexOrThrow(MediaStore.Images.Thumbnails._ID);

    GridView gridview = (GridView) findViewById(R.id.gridview);
    gridview.setAdapter(new ImageAdapter(this)); // Send this class to constructor

    /*
    gridview.setOnItemClickListener(new OnItemClickListener() {
        public void onItemClick(AdapterView<?> parent, View v, int position, long id) {
            Toast.makeText(MainActivity.this, "" + position, Toast.LENGTH_SHORT).show();
        }
    });
    */


    gridview.setOnItemClickListener(new OnItemClickListener() {

        public void onItemClick(AdapterView<?> parent, View v, int position, long id) {

            // Sending image id to FullScreenActivity
            Intent i = new Intent(getApplicationContext(), FullImageActivity.class);
            // passing array index
            i.putExtra("id", position);
            startActivity(i);
        }
    });   
}


// Nested class
public class ImageAdapter extends BaseAdapter {
    private Context mContext;

    // Constructor
    public ImageAdapter(Context c) {
        mContext = c;   
    }

    public int getCount() {
        return cursor.getCount();
    }

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

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

    // create a new ImageView for each item referenced by the Adapter
    public View getView(int position, View convertView, ViewGroup parent) {

        ImageView imageView;

        if (convertView == null) {  // if it's not recycled, initialize some attributes
            imageView = new ImageView(mContext);

            // Move cursor to current position
            cursor.moveToPosition(position);

            // Get the current value value for the requested column
            int imageId = cursor.getInt(indexColumn);

            // Set content of the image
            imageView.setImageURI(Uri.withAppendedPath(MediaStore.Images.Thumbnails.EXTERNAL_CONTENT_URI, "" + imageId));

            imageView.setLayoutParams(new GridView.LayoutParams(85, 85));
            imageView.setScaleType(ImageView.ScaleType.CENTER_CROP);
            imageView.setPadding(8, 8, 8, 8);


        } else {
            imageView = (ImageView) convertView;
        }

        //imageView.setImageResource(mThumbIds[position]);
        return imageView;
    }
}   
}
公共类MainActivity扩展活动{
光标;
int indexColumn;
@凌驾
创建时的公共void(Bundle savedInstanceState){
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
//要访问的列的数组
String[]projection={MediaStore.Images.Thumbnails.\u ID};
//光标对象
cursor=managedQuery(MediaStore.Images.Thumbnails.EXTERNAL\u CONTENT\u URI,projection,null,null,MediaStore.Images.Thumbnails.IMAGE\u ID);
//列数
indexColumn=cursor.getColumnIndexOrThrow(MediaStore.Images.Thumbnails.\u ID);
GridView GridView=(GridView)findViewById(R.id.GridView);
setAdapter(newImageAdapter(this));//将该类发送给构造函数
/*
setOnItemClickListener(新的OnItemClickListener(){
public void onItemClick(AdapterView父视图、视图v、整型位置、长id){
Toast.makeText(MainActivity.this,“+”位置,Toast.LENGTH_SHORT.show();
}
});
*/
setOnItemClickListener(新的OnItemClickListener(){
public void onItemClick(AdapterView父视图、视图v、整型位置、长id){
//正在向FullScreenActivity发送图像id
Intent i=新的Intent(getApplicationContext(),FullImageActivity.class);
//传递数组索引
i、 putExtra(“id”,位置);
星触觉(i);
}
});   
}
//嵌套类
公共类ImageAdapter扩展了BaseAdapter{
私有上下文;
//建造师
公共图像适配器(上下文c){
mContext=c;
}
public int getCount(){
返回cursor.getCount();
}
公共对象getItem(int位置){
返回位置;
}
公共长getItemId(int位置){
返回位置;
}
//为适配器引用的每个项目创建新的ImageView
公共视图getView(int位置、视图转换视图、视图组父视图){
图像视图图像视图;
如果(convertView==null){//如果它没有被回收,初始化一些属性
imageView=新的imageView(mContext);
//将光标移动到当前位置
光标。移动位置(位置);
//获取请求列的当前值
int imageId=cursor.getInt(indexColumn);
//设置图像的内容
setImageURI(Uri.withAppendedPath(MediaStore.Images.Thumbnails.EXTERNAL_CONTENT_Uri,“+imageId”);
setLayoutParams(新的GridView.LayoutParams(85,85));
imageView.setScaleType(imageView.ScaleType.CENTER\U裁剪);
设置填充(8,8,8,8);
}否则{
imageView=(imageView)convertView;
}
//setImageResource(mThumbIds[position]);
返回图像视图;
}
}   
}

将getView方法替换为以下方法:

// create a new ImageView for each item referenced by the Adapter
    public View getView(int position, View convertView, ViewGroup parent) {

        ImageView imageView;

        if (convertView == null) {  // if it's not recycled, initialize some attributes
            imageView = new ImageView(mContext);

        } else {
            imageView = (ImageView) convertView;
        }

        // Move cursor to current position
            cursor.moveToPosition(position);

            // Get the current value value for the requested column
            int imageId = cursor.getInt(indexColumn);
            // Set content of the image
                  imageView.setImageURI(Uri.withAppendedPath(MediaStore.Images.Thumbnails.EXTERNAL_CONTENT_URI, "" + imageId));
                imageView.setLayoutParams(new GridView.LayoutParams(85, 85));
            imageView.setScaleType(ImageView.ScaleType.CENTER_CROP);
            imageView.setPadding(8, 8, 8, 8);
        return imageView;
    }

告诉我它是否有效。

令人惊讶的是,没有人知道如何解决这些问题!?你好有没有人有什么想法可能是错的?谢谢你的帮助!这个问题似乎只有在我运行Android版本2.3.3的应用程序时才会发生。当我在模拟器上测试它时,它工作得很好!这很奇怪,因为我使用相同版本的Android运行模拟器。为什么会这样?有人有什么想法吗?有没有其他方法可以创建缩略图的GridView?谢谢你的回复!对不起,它坏了!有一件事更好,那就是GridView显示了正确数量的om图像,但是您仍然可以向下滚动列表很长一段时间。当我在另一个活动中全屏显示图像后返回GridView时,当我滚动列表时,应用程序崩溃!还有其他解决方法吗?我该怎么做?我可以在这里添加一个文本文件吗?我在这里删除了LogCat,因为它太长了