2012-04-01 1 views
0

Итак, я, как и многие боролись, чтобы создать галерею, которая имеет два ряда для андроид ..галерея и baseAdapter инкрементация андроид

до сих пор мое решение, чтобы иметь базовый адаптер вызов выложит, что есть две строки таблицы с пятном для фотографии в каждом, а затем в моем базовом адаптере разместите одно изображение, затем переместите мой курсор в следующую позицию и поместите другое изображение в держатель второго места .. он работает до сих пор, признавая, что мы заканчиваем повторяющимися изображениями .. поэтому я помещаю image1 и image 2 в первый проход, а затем следующий прогон, он помещает image2 поверх image3, .. есть ли способ установить приращение, к которому вызывается мой базовый адаптер?

FIXED КОД НИЖЕ

public class GallAdapter extends BaseAdapter { 
     public Cursor cursor; 
     private int columnIndex; 
     private Context context; 
     int imageBackground; 
     String url; 
     Uri uri; 
     int originalImageId; 
     int imageID; 
     int columnData; 
     ViewGroup myp; 
     ImageView d; 
     ImageView d2; 
     Boolean done = false; 

     public GallAdapter(Context ctx, Cursor cur, int cIn) { 
      context = ctx; 
      columnIndex = cIn; 

      cursor = cur; 

     } 

     @Override 
     public int getCount() { 
      Toast.makeText(context, "old:"+cursor.getCount()+" 1/2:"+cursor.getCount()/2+" roundedup:"+Math.ceil((float)cursor.getCount()/2), Toast.LENGTH_SHORT).show(); 
      return (int) Math.ceil((float)cursor.getCount()/2); 
     } 

     @Override 
     public Object getItem(int position) { 

      return position; 
     } 

     @Override 
     public long getItemId(int position) { 

      return position; 
     } 

     @Override 
     public View getView(int position, View convertView, ViewGroup parent) { 
      myp = parent; 
      View v; 

      if(convertView == null){ 
       v = LayoutInflater.from(context).inflate(R.layout.galitem2, parent, false); 
      }else{ 
       v = convertView; 

      } 


      ImageView photo = (ImageView) v.findViewById(R.id.imageView); 
      ImageView border = (ImageView) v.findViewById(R.id.borderView); 
      d = (ImageView) v.findViewById(R.id.delView); 

      ImageView photo2 = (ImageView) v.findViewById(R.id.image2View); 
      ImageView border2 = (ImageView) v.findViewById(R.id.border2View); 
      d2 = (ImageView) v.findViewById(R.id.del2View); 

       cursor.moveToPosition(position*2); 

       // Get the current value for the requested column 
       imageID = cursor.getInt(columnIndex); 
       // obtain the image URI 
       uri = Uri.withAppendedPath(MediaStore.Images.Media.EXTERNAL_CONTENT_URI, Integer.toString(imageID)); 
       url = uri.toString(); 
       // Set the content of the image based on the image URI 
       originalImageId = Integer.parseInt(url.substring(url.lastIndexOf("/") + 1, url.length())); 
       Bitmap b = MediaStore.Images.Thumbnails.getThumbnail(context.getContentResolver(), 
           originalImageId, MediaStore.Images.Thumbnails.MINI_KIND, null); 
       photo.setImageBitmap(b); 

       photo.setScaleType(ImageView.ScaleType.FIT_CENTER); 
       d.setTag(uri); 
       d.setOnClickListener(new OnClickListener(){ 


        public void onClick(View v) { 
         // TODO Auto-generated method stub 
         String path = getRealPathFromURI((Uri) v.getTag()); 

         File file = new File(path); 
         file.delete(); 
         getContentResolver().delete((Uri) v.getTag(), null, null); 
         sendBroadcast(new Intent(Intent.ACTION_MEDIA_MOUNTED, Uri.parse("file://" + Environment.getExternalStorageDirectory()+"/LC/images/"))); 
         Intent galView = new Intent(getBaseContext(), GalleryView2.class); 
         galView.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK); 
         getBaseContext().startActivity(galView); 
         finish(); 


        } 


       }); 
       if(position*2+1<=cursor.getCount()-1){ 
        // Move cursor NEXT current position 

        cursor.moveToPosition(position*2+1); 

        // Get the current value for the requested column 
        imageID = cursor.getInt(columnIndex); 
        // obtain the image URI 
        uri = Uri.withAppendedPath(MediaStore.Images.Media.EXTERNAL_CONTENT_URI, Integer.toString(imageID)); 
        url = uri.toString(); 
        // Set the content of the image based on the image URI 
        originalImageId = Integer.parseInt(url.substring(url.lastIndexOf("/") + 1, url.length())); 
        Bitmap b2 = MediaStore.Images.Thumbnails.getThumbnail(context.getContentResolver(), 
            originalImageId, MediaStore.Images.Thumbnails.MINI_KIND, null); 
        photo2.setImageBitmap(b2); 

        photo2.setScaleType(ImageView.ScaleType.FIT_CENTER);  
        d2.setTag(uri); 
        d2.setOnClickListener(new OnClickListener(){ 


         public void onClick(View v) { 
          // TODO Auto-generated method stub 
          String path = getRealPathFromURI((Uri) v.getTag()); 

          File file = new File(path); 
          file.delete(); 
          getContentResolver().delete((Uri) v.getTag(), null, null); 
          sendBroadcast(new Intent(Intent.ACTION_MEDIA_MOUNTED, Uri.parse("file://" + Environment.getExternalStorageDirectory()+"/LC/images/"))); 
          Intent galView = new Intent(getBaseContext(), GalleryView2.class); 
          galView.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK); 
          getBaseContext().startActivity(galView); 
          finish(); 


         } 


        }); 
       }else{ 
        //border2.setVisibility(v.INVISIBLE); 
        d2.setVisibility(v.INVISIBLE); 

       } 

      return v; 
     } 

    } 



} 
+0

Итак, вы хотите, чтобы две строки прокручивались независимо, или вы просто создаете галерею с двумя строками на элемент (вызов getview)? – dmon

+0

2 ряда на звонок для получения .. – erik

ответ

1

Подождите, это не то, что вы хотите просто:

first photo -> cursor.moveToPosition(position * 2); 
second photo -> cursor.moveToPosition(position * 2 + 1); 

Вам просто нужно, чтобы вернуть правильный размер в вашем адаптере getCount().

+0

им не следует? – erik

+0

Я не знаю, что вы на самом деле говорите .. Я думал, что getCount вернул общее количество найденных изображений .. я растерялся о том, как заставить getView() получать только любое другое изображение .. – erik

+0

(I'm не говоря о 'cursor.getCount()'). Итак, вы хотите отобразить 2 вещи для получения прав? Тогда ваш * адаптер * должен указать, что у него есть половина вещей, чем это было на самом деле, таким образом, 'getView()' будет вызван только наполовину. Затем в 'getView()' ваша обязанность - отобразить два изображения, которые соответствуют этой позиции, и вот в которые входят 'pos * 2' и' pos * 2 + 1'. – dmon