0

여기에 이미 코드가 있지만 다른 문제가 있습니다. 주 활동에서 볼 수 있듯이 gridview에 표시된 이미지에 대해 onItemClick 이벤트가 있지만 문제는 그림을 클릭 할 때 눈에 띄지 않는 것이 있다는 것입니다.Android Gallery Grid On 선택되지 않았습니다.

MAIN_ACTIVITY

package com.javatechig.gridview; 

import java.io.File; 
import java.util.ArrayList; 

import android.app.Activity; 
import android.content.res.TypedArray; 
import android.graphics.Bitmap; 
import android.graphics.BitmapFactory; 
import android.os.Bundle; 
import android.os.Environment; 
import android.util.Log; 
import android.view.View; 
import android.widget.AdapterView; 
import android.widget.AdapterView.OnItemClickListener; 
import android.widget.GridView; 
import android.widget.Toast; 

/** 
* 
* @author javatechig {@link http://javatechig.com} 
* 
*/ 
public class MainActivity extends Activity { 
    private GridView gridView; 
    private GridViewAdapter customGridAdapter; 

    @Override 
    protected void onCreate(Bundle savedInstanceState) { 
     super.onCreate(savedInstanceState); 
     setContentView(R.layout.activity_main_delta); 

     gridView = (GridView) findViewById(R.id.gridView); 
     customGridAdapter = new GridViewAdapter(this, R.layout.row_grid, getData()); 
     gridView.setColumnWidth(400); 
     gridView.setPadding(8, 8, 8, 8); 
     gridView.setAdapter(customGridAdapter); 

     gridView.setOnItemClickListener(new OnItemClickListener() { 
      public void onItemClick(AdapterView<?> parent, View v, 
        int position, long id) { 
       Toast.makeText(MainActivity.this, position + "#Selected", 
         Toast.LENGTH_SHORT).show(); 
       Log.w("click", "click"); 
      } 

     }); 



    } 





    private ArrayList<ImageItem> getData() { 
     final ArrayList imageItems = new ArrayList(); 

     String stringpath = Environment.getExternalStorageDirectory().toString()+"/Pictures/Hello Camera"; 
     File path=new File(stringpath); 
     File[] imageFiles = path.listFiles(); 
     for (int i = 0; i < imageFiles.length; i++) { 
      // Bitmap bitmap = BitmapFactory.decodeFile(imageFiles[i].getAbsolutePath()); 
      // imageItems.add(new ImageItem(bitmap, "Image#" + i)); 

      final BitmapFactory.Options options = new BitmapFactory.Options(); 
      options.inSampleSize = 4; 

      Bitmap bitmap = BitmapFactory.decodeFile(imageFiles[i].getAbsolutePath(),options); 
      imageItems.add(new ImageItem(bitmap, "Image#" + i)); 

     } 

     return imageItems;} 

} 

GridViewAdapter

package com.javatechig.gridview; 

import java.util.ArrayList; 

import android.app.Activity; 
import android.content.Context; 
import android.view.LayoutInflater; 
import android.view.View; 
import android.view.ViewGroup; 
import android.widget.ArrayAdapter; 
import android.widget.CheckBox; 
import android.widget.ImageView; 
import android.widget.TextView; 

/** 
* 
* @author javatechig {@link http://javatechig.com} 
* 
*/ 
public class GridViewAdapter extends ArrayAdapter<ImageItem> { 
    private Context context; 
    private int layoutResourceId; 
    private ArrayList<ImageItem> data = new ArrayList<ImageItem>(); 

    public GridViewAdapter(Context context, int layoutResourceId, 
      ArrayList<ImageItem> data) { 
     super(context, layoutResourceId, data); 
     this.layoutResourceId = layoutResourceId; 
     this.context = context; 
     this.data = data; 
    } 

    @Override 
    public View getView(int position, View convertView, ViewGroup parent) { 
     View row = convertView; 
     ViewHolder holder = null; 

     if (row == null) { 
      LayoutInflater inflater = ((Activity) context).getLayoutInflater(); 
      row = inflater.inflate(layoutResourceId, parent, false); 
      holder = new ViewHolder(); 
      holder.imageTitle = (TextView) row.findViewById(R.id.text); 
      holder.image = (ImageView) row.findViewById(R.id.image); 
      holder.checkbox = (CheckBox) row.findViewById(R.id.checkBox1); 
      row.setTag(holder); 
     } else { 
      holder = (ViewHolder) row.getTag(); 
     } 

     ImageItem item = data.get(position); 
     holder.imageTitle.setText(item.getTitle()); 
     holder.image.setImageBitmap(item.getImage()); 
     holder.checkbox.setChecked(false); 

     return row; 
    } 

    static class ViewHolder { 
     TextView imageTitle; 
     ImageView image; 
     CheckBox checkbox; 
    } 
} 

ImageItem

package com.javatechig.gridview; 

import android.graphics.Bitmap; 

/** 
* @author javatechig {@link http://javatechig.com} 
* 
*/ 
public class ImageItem { 
    private Bitmap image; 
    private String title; 

    public ImageItem(Bitmap image, String title) { 
     super(); 
     this.image = image; 
     this.title = title; 
    } 

    public Bitmap getImage() { 
     return image; 
    } 

    public void setImage(Bitmap image) { 
     this.image = image; 
    } 

    public String getTitle() { 
     return title; 
    } 

    public void setTitle(String title) { 
     this.title = title; 
    } 
} 

**

  • XML

**

는 rowgrid

<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:background="@drawable/grid_color_selector" 
    android:descendantFocusability="blocksDescendants"> 

    <ImageView 
     android:id="@+id/image" 
     android:layout_width="200dp" 
     android:layout_height="200dp" 
     android:scaleType="center" > 

    </ImageView> 

    <CheckBox 
     android:id="@+id/checkBox1" 
     android:layout_width="match_parent" 
     android:layout_height="wrap_content" 
     android:text="CheckBox" 
     /> 

    <TextView 
     android:id="@+id/text" 
     android:layout_width="fill_parent" 
     android:layout_height="wrap_content" 
     android:layout_marginTop="5dp" 
     android:gravity="center" 
     android:textSize="12sp" 
     > 
    </TextView> 

</LinearLayout> 

activity_main_delta

<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android" 
    xmlns:tools="http://schemas.android.com/tools" 
    android:layout_width="match_parent" 
    android:layout_height="match_parent" 
    android:background="#f0f0f0" 
    tools:context=".MainActivity" 
    android:descendantFocusability="blocksDescendants" > 

    <GridView 
     android:id="@+id/gridView" 
     android:layout_width="fill_parent" 
     android:layout_height="wrap_content" 
     android:layout_margin="5dp" 
     android:clickable="true" 
     android:columnWidth="100dp" 
     android:drawSelectorOnTop="true" 
     android:gravity="center" 
     android:numColumns="auto_fit" 
     android:stretchMode="columnWidth" 
     android:verticalSpacing="5dp" > 

    </GridView> 

</RelativeLayout> 

어떻게 해결할 수 있습니까?

감사합니다.

+0

여기 또는 주어진 링크에서 onItemClick-EventListener를 볼 수 없습니다. – Burn

+0

@Burn 예, 죄송 합니다만 그 부분을 추가하는 것을 잊어 버렸습니다. 나는 그 질문을 편집했다. 주요 출처는 어댑터와 XML 파일을 추가하는 것입니다. – Iosif

답변

0

rowgrid LinearLayout에서 android : clickable 속성을 제거하십시오. GridView가 가져 오기 전에 이벤트를 캡처합니다. 그래서 모든 onClick 및 onLongClick을 GridView의 onItemClick 및 onItemLongClick Listener에 바인딩하십시오. 행운을 비네.