2011-07-01 43 views
0

我試圖從網格視圖中的庫中獲取照片的路徑。這個畫廊由每個附有複選框的縮略圖組成。這裏是整個代碼:如何使用複選框從網格視圖的複選框獲取選中的圖片的路徑android

public class GridGallery extends Activity 
{ 

    ArrayList<String>list; 
AlertDialog.Builder alert; 
private Button send; 
GridView gridView; 
@Override 
public void onCreate(Bundle savedInstanceState) 
{ 
    super.onCreate(savedInstanceState); 
    setContentView(R.layout.grid_gallery); 
    DataModel dbModel = new DataModel(this); 
    list = dbModel.selectAll();    

    alert = new AlertDialog.Builder(GridGallery.this); 
    send = (Button)findViewById(R.id.send_message); 
    gridView = (GridView) findViewById(R.id.sdcard); 
    gridView.setAdapter(new ImageAdapter(this)); 

      gridView.setClickable(true);   
    gridView.setOnItemClickListener(new OnItemClickListener() { 

     public void onItemClick(AdapterView<?> arg0, View view, int pos, 
       long id) 
     { 
      // TODO Auto-generated method stub 
      final int position = pos; 
      final String path = list.get(position).toString(); 
      final String option[] = new String[]{"Send to","Watch"}; 
      alert.setTitle("Pick options"); 
      alert.setItems(option, new OnClickListener() { 

       public void onClick(DialogInterface dialog, int which) 
       { 
        // TODO Auto-generated method stub 
        if(option[which].equals("Watch")) 
        { 
         if(path.contains(".jpg")) 
         { 
          Intent intent = new Intent(Intent.ACTION_VIEW);   
          intent.setDataAndType(Uri.fromFile(new File(list.get(position))), "image/jpeg"); 
          startActivity(intent);     
         } 
         else if(path.contains(".mp4")) 
         { 
          Intent intent = new Intent(Intent.ACTION_VIEW);   
          intent.setDataAndType(Uri.fromFile(new File(list.get(position))), "video/*"); 
          startActivity(intent); 
         } 
         else 
         { 
          Intent intent = new Intent(Intent.ACTION_VIEW);   
          intent.setDataAndType(Uri.fromFile(new File(list.get(position))), "audio/*"); 
          startActivity(intent); 
         } 
        }// 
        else 
        { 
         Intent sendMail = new Intent(GridGallery.this, SendMessage.class); 
         sendMail.putExtra("path", path); 
         startActivity(sendMail);        
        } 
       } 
      }).show(); 
     } 
    }); 
    send.setOnClickListener(new View.OnClickListener() { 

     public void onClick(View v) 
     { 
      // TODO Auto-generated method stub 
      String path = null;    

      Intent sendToMail = new Intent(GridGallery.this, SendMessage.class); 
      sendToMail.putExtra("path", path); 
      startActivity(sendToMail); 

     } 
    }); 
} 


/** 
* Adapter for our image files. 
*/ 
private class ImageAdapter extends BaseAdapter 
{ 

    private final Context context; 
    Bitmap bitmap; 

    public ImageAdapter(Context localContext) { 
     context = localContext; 
    } 

    public int getCount() 
    { 
     return list.size(); 
    } 
    public Object getItem(int position) 
    { 
     return position; 
    } 
    public long getItemId(int position) 
    { 
     return position; 
    } 

    public View getView(int position, View convertView, ViewGroup parent) 
    { 
     ImageView picturesView; 
     View myView = convertView; 
     if (convertView == null) 
     { 

      LayoutInflater layoutInflater = (LayoutInflater)context.getSystemService(Context.LAYOUT_INFLATER_SERVICE);//getLayoutInflater(); 
      myView = layoutInflater.inflate(R.layout.image_selection, null); 

      picturesView = new ImageView(context); 
      picturesView = (ImageView)myView.findViewById(R.id.item_grid); 
      picturesView.setClickable(true); 

      if(list.get(position).contains(".jpg")) 
      { 
       bitmap = BitmapFactory.decodeFile(list.get(position)); 
      } 
      else if(list.get(position).contains(".mp4")) 
      { 
       bitmap = ThumbnailUtils.createVideoThumbnail(list.get(position), 0); 
      } 
      else 
      { 

      } 

      picturesView.setImageBitmap(bitmap); 
      picturesView.setScaleType(ImageView.ScaleType.FIT_CENTER); 
      picturesView.setPadding(8, 8, 8, 8); 
      return myView; 
     } 
     else 
     { 
      myView = convertView; 
      return myView; 
     } 

    } 
} 

}

我的問題是我能不能夠點擊圖片或視頻的縮略圖。當我檢查複選框時,如何能夠獲取圖像。

這裏是XML代碼Image_selection: -

<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" android:layout_width="fill_parent" 
      android:layout_height="fill_parent" android:orientation="vertical" android:gravity="center_horizontal"> 
     <ImageView android:id="@+id/item_grid" android:layout_width="100dip" android:layout_height="100dip"/> 
     <CheckBox android:id="@+id/check" android:layout_width="wrap_content" android:layout_height="wrap_content" /> 

和grid_gallery.xml: -

<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android" android:layout_width="fill_parent" android:layout_height="fill_parent" android:orientation="vertical"> 
<GridView xmlns:android="http://schemas.android.com/apk/res/android" 
    android:id="@+id/sdcard" 
    android:layout_width="fill_parent" 
    android:layout_height="fill_parent" 
    android:padding="10dp" 
    android:verticalSpacing="10dp" 
    android:horizontalSpacing="10dp" 
    android:numColumns="auto_fit" 
    android:columnWidth="90dp" 
    android:stretchMode="columnWidth" 
    android:gravity="center" 
/> 
</RelativeLayout> 

請幫助我。在此先感謝

+0

''gridView.setAdapter(new ImageAdapter(this))''後代碼不工作 –

回答

1

它似乎你存儲在ArrayList列表中的圖像路徑。如果是這樣,那麼爲GridView設置一個onItemClickListeber。在onItemClick方法中,您可以獲得被點擊的gridview的位置。嘗試'list.get(position)in the onItemClick`得到路徑

+0

對不起,我忘了添加那個代碼不是有效。以上是完整的代碼。這onItemClick不起作用 –

+0

是你的onItemClick方法被調用? – pankajagarwal

+0

NO。它不叫 –

相關問題