0

GridView が正しい数のサムネイルを表示せず、代わりにグループ内のサムネイルの重複が多数表示される問題を解決するための助けを探していますか? そして、サムネイルのリストを上下にスクロールして一番上に戻ると、画像の順序が常に変わります。

原因と解決方法を知っている人はいますか?おそらく、サムネイルの GridView を作成するより良い方法はありますか? それとも私の電話ですか?Android バージョン 2.3.3 の Samsung Young を使用しています。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;
    }
}   
}
4

1 に答える 1

0

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

それが機能するかどうか教えてください..

于 2013-02-17T12:19:05.653 に答える