2014-07-15 3 views
0

나는 이미 전화의 모든 이미지를 포함하는 gridview를 구현해야하는 어플리케이션에서 작업 중입니다. 코드를 작성했지만 문제는이 응용 프로그램을 열 때 이미지가없는 스크롤 가능한 BLANK gridview가 생기는 것입니다. 아무도 도와 줄 수 있습니까?빈 이미지를 보여주는 전화 갤러리의 이미지 격자보기

이 내 주요 활동 코드 :

package com.example.gridviewgallery; 

import android.database.Cursor; 
import android.os.Bundle; 
import android.provider.MediaStore; 
import android.support.v7.app.ActionBarActivity; 
import android.view.MenuItem; 
import android.widget.GridView; 

public class MainActivityGridView extends ActionBarActivity { 

    private int columnIndex; 
    private Cursor cursor = null; 

    @SuppressWarnings("deprecation") 
    @Override 
    protected void onCreate(Bundle savedInstanceState) { 
     super.onCreate(savedInstanceState); 
     setContentView(R.layout.activity_main_activity_grid_view); 

     String[] projection = {MediaStore.Images.Thumbnails._ID, MediaStore.Images.Thumbnails.DATA}; 
     cursor = managedQuery(MediaStore.Images.Thumbnails.EXTERNAL_CONTENT_URI, projection, null, null, 
       MediaStore.Images.Thumbnails.IMAGE_ID); 
     columnIndex = cursor.getColumnIndexOrThrow(MediaStore.Images.Thumbnails._ID); 

     GridView gridview = (GridView) findViewById(R.id.gridView1); 
     gridview.setAdapter(new GridAdapter(getApplicationContext(), cursor, columnIndex)); 

    } 

    @Override 
    public boolean onOptionsItemSelected(MenuItem item) { 
     // Handle action bar item clicks here. The action bar will 
     // automatically handle clicks on the Home/Up button, so long 
     // as you specify a parent activity in AndroidManifest.xml. 
     int id = item.getItemId(); 
     if (id == R.id.action_settings) { 
      return true; 
     } 
     return super.onOptionsItemSelected(item); 
    } 
} 

이 내 GridAdapter 클래스 코드 :

package com.example.gridviewgallery; 

import android.content.Context; 
import android.database.Cursor; 
import android.net.Uri; 
import android.provider.MediaStore; 
import android.support.v4.widget.CursorAdapter; 
import android.view.LayoutInflater; 
import android.view.View; 
import android.view.ViewGroup; 
import android.widget.GridView; 
import android.widget.ImageView; 

public class GridAdapter extends CursorAdapter 
{ 
    private Context mContext; 
    private Cursor mCursor; 
    private int mColumnIndex; 
    private ImageView imageView; 

    @SuppressWarnings("deprecation") 
    public GridAdapter(Context context, Cursor c, int ci) { 
     super(context, c); 
     mContext = context; 
     mCursor = c; 
     mColumnIndex = ci; 
    } 

    @Override 
    public void bindView(View convertView, Context context, Cursor curs) 
    { 
     imageView = (ImageView) convertView.findViewById(R.id.image); 
    } 

    @Override 
    public View newView(Context context, Cursor curs, ViewGroup parent) 
    { 
     imageView = new ImageView(mContext); 

     LayoutInflater inflater = LayoutInflater.from(parent.getContext()); 
     View retView = inflater.inflate(R.layout.grid_image, parent, false); 

     int id = curs.getInt(mColumnIndex); 
     imageView.setImageURI(Uri.withAppendedPath(MediaStore.Images.Thumbnails.EXTERNAL_CONTENT_URI, String.valueOf(id))); 
     imageView.setLayoutParams(new GridView.LayoutParams(85, 85)); 
     imageView.setScaleType(ImageView.ScaleType.CENTER_CROP); 
     imageView.setPadding(8, 8, 8, 8); 

     return retView; 
    } 

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

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

    public int mygetItemId(int position) { 
     return 0; 
    } 

} 

이가 grid_image.xml 코드 :

<?xml version="1.0" encoding="utf-8"?> 
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" 
    xmlns:tools="http://schemas.android.com/tools" 
    android:layout_width="wrap_content" 
    android:layout_height="wrap_content" 
    android:layout_marginTop="5dp" 
    android:orientation="vertical" 
    android:padding="5dp" 
    android:clickable="true" 
    android:focusable="true"> 

    <ImageView 
     android:id="@+id/image" 
     android:layout_width="fill_parent" 
     android:layout_height="fill_parent" > 
    </ImageView> 

</LinearLayout> 

감사합니다.

+0

.. 난 그냥 내 질문에 편집이 많은 천재 사람 덕분이야 – greenapps

+0

을 게시하시기 바랍니다! 완벽하게 작동했습니다. – user3783005

답변

0

이것은 XML 파일을 사용하지 않고 작성한 것입니다. (기다리지 못하게 ;-)) 비트 맵 할당은 bindView()에서 이루어져야합니다.

@Override 
public void bindView(View view, Context context, Cursor curs) 
{   
    ImageView imageView = (ImageView) view; 
    int id = curs.getInt(mColumnIndex); 
    imageView.setImageURI(Uri.withAppendedPath(MediaStore.Images.Thumbnails.EXTERNAL_CONTENT_URI, 
     String.valueOf(id))); 
    imageView.setLayoutParams(new GridView.LayoutParams(85, 85)); 
    imageView.setScaleType(ImageView.ScaleType.CENTER_CROP); 
    imageView.setPadding(8, 8, 8, 8); 
} 

@Override 
public View newView(Context context, Cursor curs, ViewGroup parent) 
{ 
    return new ImageView(context); 
} 
+0

덕분에 당신의 XML 레이아웃 파일 R.layout.grid_image – user3783005

+0

사진을 더 크게 보이게 할 수있는 방법을 말해 줄 수 있습니까? 덕분에 – user3783005

+0

모르겠다. setLayoutParams (새로운 GridView.LayoutParams (85, 85))에서 85,85로 이미 피팅하려고 했습니까? ? – greenapps

관련 문제