2016-08-28 2 views
0

Моя цель состоит в том, чтобы иметь возможность щелкнуть «загрузить изображение» и отобразить его в виде сетки, аналогично фиду instagram на своем профиле (не прокручиваемом фиде, сетка). Честно говоря, я очень потерялся и просто пытался использовать разные методы, которые я нашел на сайтах в Интернете, но ничего действительно не сработало.Хотите добавить фотографии из галереи в GridView (Android Studio)

MainActivity:

public class MainActivity extends AppCompatActivity implements View.OnClickListener { 

    private static final int RESULT_LOAD_IMAGE = 1; 
    private ArrayList<Image> items = new ArrayList<Image>(); 

    ImageView uploadedImage; 
    Button bUploadImage; 


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

     bUploadImage = (Button)findViewById(R.id.bUploadImage); 
     bUploadImage.setOnClickListener(this); 

     GridView gridview = (GridView) findViewById(R.id.gridview); 
     gridview.setAdapter(new ImageAdapter(this,R.id.bUploadImage,items)); 

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

    } 

    @Override 
    public void onClick(View v) { 
     switch(v.getId()){ 
      case R.id.bUploadImage: 
       Intent galleryIntent = new Intent(Intent.ACTION_PICK, MediaStore.Images.Media.EXTERNAL_CONTENT_URI); 
       startActivityForResult(galleryIntent, RESULT_LOAD_IMAGE); 
       break; 

     } 
    } 

    @Override 
    protected void onActivityResult(int requestCode, int resultCode, Intent data) { 
     super.onActivityResult(requestCode, resultCode, data); 
     if (requestCode == RESULT_LOAD_IMAGE && resultCode == RESULT_OK && data != null){ 
      Uri selectedImage = data.getData(); 
      uploadedImage.setImageURI(selectedImage); 
      Image i = new Image(); 
      i.setURI(selectedImage); 
      items.add(i); 

     } 
    } 
} 

ImageAdapter:

public class ImageAdapter extends ArrayAdapter<Image> { 
    private Context mContext; 
    private ArrayList<Image> items; 

    public ImageAdapter(Context context, int textViewResourceId, ArrayList<Image> items) { 
     super(context, textViewResourceId, items); 
     mContext = context; 
     this.items = items; 
    } 

    @Override 
    public View getView(int position, View convertView, ViewGroup parent) { 
     ImageView imageView; 
     if (convertView == null) { 
      // if it's not recycled, initialize some attributes 
      imageView = new ImageView(mContext); 
      imageView.setLayoutParams(new GridView.LayoutParams(85, 85)); 
      imageView.setScaleType(ImageView.ScaleType.CENTER_CROP); 
      imageView.setPadding(8, 8, 8, 8); 
     } else { 
      imageView = (ImageView) convertView; 
     } 
     if (position == 0) 
      imageView.setImageURI(items.get(position).getURI()); 
     return imageView; 
    } 
} 

класс Image:

public class Image { 
    private Uri imgURI; 

    public Uri getURI(){ 
     return imgURI; 
    } 

    public void setURI(Uri imgURI){ 
     this.imgURI = imgURI; 
    } 

} 

Я видел много способов отображения изображений на сетке, но ни один, используя изображения из галереи , В моем коде выше я пытаюсь передать в Uri изображение из галереи в адаптер, но я смущен тем, как адаптеры и все это работает. Я полный новичок в Android Studio. Любое руководство полезно, спасибо!

+0

попробуйте это http://www.androidhive.info/2013/09/android-fullscreen-image-slider-with-swipe-and-pinch-zoom-gestures/ – onexf

+0

Не могли бы вы изменить ваш вопрос? Непонятно, что именно вы пытаетесь сделать. Благодарю. –

ответ

0

На месте следующей строки в OnCreate

gridview.setAdapter(new ImageAdapter(this,R.id.bUploadImage,items)); 

Создать адаптер уровня класса

private ImageAdapter adapter; 

и в OnCreate()

adapter = new ImageAdapter(this,R.id.bUploadImage,items) 
gridview.setAdapter(adapter); 

В onActivityResult после адаптера item.add вызова. notifyDatasetChanged.

+0

Я не могу добавить вызов «adapter.notifyDatasetChanged» в MainActivity, не уверен, почему. –

+0

вы вызываете adapter.notifyDataSetChanged() (это точное правописание, попробуйте это), иначе дайте мне некоторые подробности. – Ramit

Смежные вопросы