[Android] добавление флажка к изображениям в виде сетки - PullRequest
0 голосов
/ 14 июня 2011

XML для макета сетки.

<GridView xmlns:android="http://schemas.android.com/apk/res/android" 
    android:id="@+id/myGrid"
    android:layout_width="fill_parent" 
    android:layout_height="fill_parent"
    android:padding="2dip"
    android:verticalSpacing="10dp"
    android:horizontalSpacing="10dp"
    android:numColumns="auto_fit"
    android:columnWidth="148dp"
    android:stretchMode="spacingWidthUniform"
    android:gravity="center"
    />
</RelativeLayout>

imagenselect.xml для изображения и флажка.

<LinearLayout 
    xmlns:android="http://schemas.android.com/apk/res/android"
    android:id="@+id/GridItem"
    android:layout_width="wrap_content"
    android:layout_height="wrap_content"
    android:orientation="vertical"
    android:gravity="center_horizontal"
    android:background="#000080">

    <ImageView
        android:id="@+id/grid_item_image"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content">
    </ImageView>
 <CheckBox 
     android:id="@+id/check1"
     android:layout_width="wrap_content"
     android:layout_height="wrap_content" android:text="Android" />
</LinearLayout>

Класс для добавления изображений в сетку и отображения,

private class ImageAdapter extends BaseAdapter {

        private Context context;
        public ImageAdapter(Context localcontext){  
            context = localcontext;
        }
        public int getCount() { 
            return cursor.getCount();
        } 

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

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

    @Override
    public View getView(int position, View convertView, ViewGroup parent) {
    // TODO Auto-generated method stub\

    View MyView = convertView;
    ImageView picturesView;
    picturesView = new ImageView(context);

    if (convertView == null) {

     LayoutInflater li = getLayoutInflater();
     MyView =  li.inflate(R.layout.imagenselect, null);

    // Move cursor to current position
    cursor.moveToPosition(position);
    // Get the current value for the requested column
    int imageID = cursor.getInt(columnIndex);
    // Set the content of the image based on the provided URI
        picturesView.setImageURI(Uri.withAppendedPath(
    MediaStore.Images.Thumbnails.EXTERNAL_CONTENT_URI, "" + imageID));

    picturesView.setScaleType(ImageView.ScaleType.FIT_CENTER);
    picturesView.setPadding(8, 8, 8, 8);
    picturesView.setLayoutParams(new GridView.LayoutParams(100, 100));           
        }
    else {
         picturesView = (ImageView) convertView;
    }
    return picturesView;
      }
    }
}

Вот с этим кодом,Я получаю только изображения в gridview.Но я хочу раздуть вид и использовать его так, чтобы я мог добавить флажок вместе с изображением.(для каждого изображения установлен флажок).

Поскольку в функциях «myView» и «picturesView» есть два вида.Если я попытаюсь типизировать picturesView к myView, то получаю сбой.Заранее спасибо!

при изменении, как вы и предлагали, я получаю сбой.

        @Override
    public View getView(int position, View convertView, ViewGroup parent) {
        // TODO Auto-generated method stub\

        View myView = convertView;
        if (convertView == null) {
           LayoutInflater li = getLayoutInflater();
           myView =  li.inflate(R.layout.imagenselect, null);
            }
        ImageView picturesView;
        picturesView = new ImageView(context);
               picturesView = (ImageView) myView.findViewById( R.id.grid_item_image);

        // Move cursor to current position
        cursor.moveToPosition(position);
        // Get the current value for the requested column
        int imageID = cursor.getInt(columnIndex);
        // Set the content of the image based on the provided URI
        picturesView.setImageURI(Uri.withAppendedPath(
              MediaStore.Images.Thumbnails.EXTERNAL_CONTENT_URI, "" + imageID));

        picturesView.setScaleType(ImageView.ScaleType.FIT_CENTER);
        picturesView.setPadding(8, 8, 8, 8);
        picturesView.setLayoutParams(new GridView.LayoutParams(100, 100));               

        return myView;
    }

1 Ответ

1 голос
/ 14 июня 2011

Ваш код на самом деле выглядит очень запутанным для меня.Ваш код всегда возвращает объект ImageView, а не представление MyView, которое вы надуваете из макета, содержащего ваш флажок.Это объясняет, почему ваш флажок не отображается.

Я думаю, что вам нужно что-то вроде:

@Override
public View getView(int position, View convertView, ViewGroup parent) {
    View myView = convertView
    if( myView == null )
    {
        LayoutInflater li = getLayoutInflater();
        myView = li.inflate(R.layout.imagenselect, null);
    }
    ImageView pictureView = (ImageView) myView.findViewById( R.id.grid_item_image );
    // initialise pictureView here.
    return myView;
}
...