GridView visar kopior av thumbnails

Discussion in 'Frågor, support och diskussion' started by 3D-kreativ, Feb 18, 2013.

  1. 3D-kreativ

    3D-kreativ Infant Droid Medlem

    Joined:
    Feb 16, 2013
    Messages:
    9
    Likes Received:
    0

    MINA ENHETER

    Någon som har tips på lösning varför GridView visar flera kopior av samma thumbnails och varför ordningen ändras i början av listan när man scrollar listan fram och tillbaks? Jag har kört fast totalt och kommer inte vidare! Uppskattar tips på lösning!


    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 imagesSD = (GridView) findViewById(R.id.gridview);
    imagesSD.setAdapter(new ImageAdapter(this));

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


    imagesSD.setOnItemClickListener(new OnItemClickListener() {

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

    String[] projection = {MediaStore.Images.Media.DATA};
    cursor = managedQuery(MediaStore.Images.Media.EXTERNAL_CONTENT_URI, projection, null, null, null);
    indexColumn = cursor.getColumnIndexOrThrow(MediaStore.Images.Media.DATA);
    cursor.moveToPosition(position2);
    String imagePath = cursor.getString(indexColumn);

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

    //Toast.makeText(MainActivity.this, "" + imagePath, Toast.LENGTH_SHORT).show();

    startActivity(i);
    }
    });
    }


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

    // Constructor
    public ImageAdapter(Context c) {
    context = 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(context);

    // 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.setScaleType(ImageView.ScaleType.FIT_CENTER);
    imageView.setPadding(8, 8, 8, 8);
    imageView.setLayoutParams(new GridView.LayoutParams(100, 100));

    } else {
    imageView = (ImageView) convertView;
    }

    return imageView;
    }
    }
    }
     
    Last edited: Feb 18, 2013
  2. e7andy

    e7andy Professional Droid Hedersmedlem

    Joined:
    Oct 14, 2009
    Messages:
    2 349
    Likes Received:
    835
    Telefon:
    Huawei P10 Plus

    MINA ENHETER

    Telefon:
    Huawei P10 Plus
    Telefon 2:
    Nexus 5
    Telefon 3:
    ADP1
    Övrigt:
    LG G Watch R, ChromeCast
    Lägg även upp din layout och andra filer som saknas eller varför inte packa ihop hela projektet och lägga upp det på dropbox eller annat ställe så vi kan köra koden och faktiskt se vad som verkligen händer.

    Har du följt några exempel? Lägg i så fall upp länkar till dem.
    Här hittade jag ett exempel på just vad du försöker göra:
    http://android-er.blogspot.se/2012/11/list-mediastoreimagesthumbnails-in.html

    Tips! Använd CODE-taggarna.

    Korrekt formaterad kod så den blir läslig:
    Code:
    import android.R;
    import android.app.Activity;
    import android.content.Context;
    import android.content.Intent;
    import android.database.Cursor;
    import android.net.Uri;
    import android.os.Bundle;
    import android.provider.MediaStore;
    import android.view.View;
    import android.view.ViewGroup;
    import android.widget.AdapterView;
    import android.widget.AdapterView.OnItemClickListener;
    import android.widget.BaseAdapter;
    import android.widget.GridView;
    import android.widget.ImageView;
    
    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 imagesSD = (GridView) findViewById(R.id.gridview);
    		imagesSD.setAdapter(new ImageAdapter(this));
    
    		/*
    		 * gridview.setOnItemClickListener(new OnItemClickListener() { public
    		 * void onItemClick(AdapterView parent, View v, int position, long id) {
    		 * Toast.makeText(MainActivity.this, "" + position,
    		 * Toast.LENGTH_SHORT).show(); } });
    		 */
    
    		imagesSD.setOnItemClickListener(new OnItemClickListener() {
    
    			public void onItemClick(AdapterView parent, View v, int position2, long id) {
    
    				String[] projection = { MediaStore.Images.Media.DATA };
    				cursor = managedQuery(MediaStore.Images.Media.EXTERNAL_CONTENT_URI, projection, null, null, null);
    				indexColumn = cursor.getColumnIndexOrThrow(MediaStore.Images.Media.DATA);
    				cursor.moveToPosition(position2);
    				String imagePath = cursor.getString(indexColumn);
    
    				// Sending image id to FullScreenActivity
    				Intent i = new Intent(getApplicationContext(), FullImageActivity.class);
    				// passing array index
    				i.putExtra("image", imagePath);
    
    				// Toast.makeText(MainActivity.this, "" + imagePath,
    				// Toast.LENGTH_SHORT).show();
    
    				startActivity(i);
    			}
    		});
    	}
    
    	// Nested class
    	public class ImageAdapter extends BaseAdapter {
    		private Context context;
    
    		// Constructor
    		public ImageAdapter(Context c) {
    			context = 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(context);
    
    				// 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.setScaleType(ImageView.ScaleType.FIT_CENTER);
    				imageView.setPadding(8, 8, 8, 8);
    				imageView.setLayoutParams(new GridView.LayoutParams(100, 100));
    
    			} else {
    				imageView = (ImageView) convertView;
    			}
    
    			return imageView;
    		}
    	}
    }