2016-09-02 5 views
0

ギャラリーがありますが、メモリが多すぎます。グライドがカスタムギャラリーで動作しない

私はGlideを実装したかったのですが、動作しませんでした。

マイ公共ImageAdapterクラス:

public class ImageAdapter extends BaseAdapter { 
    private LayoutInflater mInflater; 
    private Activity context; 

    public ImageAdapter() { 
     mInflater = (LayoutInflater) getSystemService(Context.LAYOUT_INFLATER_SERVICE); 

    } 

    public int getCount() { return count; } 

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

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


    public View getView(int position, View convertView, ViewGroup parent) { 
     final ViewHolder holder; 
     if (convertView == null) { 
      holder = new ViewHolder(); 
      convertView = mInflater.inflate(
        R.layout.galleryitem, null); 
      holder.imageview = (ImageView) convertView.findViewById(R.id.thumbImage); 
      holder.checkbox = (CheckBox) convertView.findViewById(R.id.itemCheckBox); 
      holder.checkbox.setId(position); 
      holder.imageview.setId(position); 
      convertView.setTag(holder); 
     } else { 
      holder = (ViewHolder) convertView.getTag(); 
     } 


     View.OnClickListener clickListener = new View.OnClickListener() { 


      public void onClick(View v) { 
       int id = holder.checkbox.getId(); 

       if (thumbnailsselection[id]) { 
        holder.checkbox.setChecked(false); 
        thumbnailsselection[id] = false; 
       } else { 
        holder.checkbox.setChecked(true); 
        thumbnailsselection[id] = true; 
       } 
      } 

     }; 

     holder.checkbox.setOnClickListener(clickListener); 
     holder.imageview.setOnClickListener(clickListener); 

     holder.imageview.setOnLongClickListener(new View.OnLongClickListener() { 

      public boolean onLongClick(View v) { 
       // TODO Auto-generated method stub 
       int id = v.getId(); 
       Intent intent = new Intent(); 
       intent.setAction(Intent.ACTION_VIEW); 
       intent.setDataAndType(Uri.parse("file://" + arrPath[id]), "image/*"); 
       startActivity(intent); 
       return true; 
      } 

     }); 
     holder.imageview.setImageBitmap(thumbnails[position]); 
     holder.checkbox.setChecked(thumbnailsselection[position]); 
     holder.id = position; 


     Glide.with(context).load(holder.imageview) 
       .placeholder(R.drawable.logo).centerCrop() 
       .into((ImageView) convertView); 

     return convertView; 
    } 
} 

class ViewHolder { 
    ImageView imageview; 
    CheckBox checkbox; 
    int id; 
} 

のOnCreateメソッド:

GridView imagegrid = (GridView) findViewById(R.id.PhoneImageGrid); 
imagegrid.setAdapter(new ImageAdapter()); 

Logcat:

java.lang.NullPointerException: Attempt to invoke virtual method 'boolean android.app.Activity.isDestroyed()' on a null object reference 
at com.bumptech.glide.manager.RequestManagerRetriever.assertNotDestroyed(RequestManagerRetriever.java:133) 
at com.bumptech.glide.manager.RequestManagerRetriever.get(RequestManagerRetriever.java:125) 
at com.bumptech.glide.Glide.with(Glide.java:641) 
at com.example.example.photonet.Gallery$ImageAdapter.getView(Gallery.java:170) 

私はAndroidStudioそれを受け入れることをImageViewのにconvertViewをキャストしなければなりませんでした。

グライド部分がないとうまくいきません。だから問題はその部分にある。

+0

確認[この(http://stackoverflow.com/questions/39093730/you-cannot-startに-a-destroy-activity-in-relativelayout-image-using-g)のためのロード。同じ問題が私に起こった – Steve

答えて

0

変更

注:使用するコンテキスト。 Sohail Zahidは、Load SDカードはこちら

Glide.with(context).load("Url") 
      .placeholder(R.drawable.logo).centerCrop() 
      .into(holder.imageview); 

答えるようにあなたは、あなたがadatperを設定しながら、この

String fileName = "1.jpg"; 
String completePath = Environment.getExternalStorageDirectory() + "/" + fileName; 

File file = new File(completePath); 
Uri imageUri = Uri.fromFile(file); 

Glide.with(this) 
     .load(imageUri) 
       .into(holder.imageview); 
+0

java.lang.NullPointerException:nullオブジェクト参照で仮想メソッド 'boolean android.app.Activity.isDestroyed()'を呼び出そうとしました – Janos

+0

あなたのURLは何ですか? –

+0

私はURLを持っていません私は自分の携帯電話から写真を持っています。 – Janos

0

をパラメータとしてコンストラクタImageAdapter(context)にパスcontext以下のようにいくつかの変更を行いますに従う必要がコンテキストにする必要があります。

imagegrid.setAdapter(new ImageAdapter(ActivityName.this));

public class ImageAdapter extends BaseAdapter { 
    private LayoutInflater mInflater; 
    private Context context; 

    public ImageAdapter(Context context) { 
     mInflater = (LayoutInflater) getSystemService(Context.LAYOUT_INFLATER_SERVICE); 
     this.context = context; 
    } 

更新:(ImageView) convertViewholder.imageview

Glide.with(context).load(holder.imageview) 
       .placeholder(R.drawable.logo).centerCrop() 
       .into(holder.imageview); 
+0

に従って、答えとコンテキストの設定を更新します。java.lang.IllegalArgumentException:不明な型のクラスandroid.support.v7.widget.AppCompatImageView。 ModelLoaderが登録されているタイプのモデルを提供する必要があります。カスタムモデルを使用している場合、カスタムモデルクラスのModelLoaderFactoryでGlide#registerを呼び出す必要があります – Janos

+0

logcatは同じままクラッシュ – Janos

0
GalleryImages image = images.get(position); 
//image.getMedium() == this is your image url 
//holder.thumbnail = this is your imageview 
    Glide.with(mContext).load(image.getMedium()) 

      .thumbnail(0.5f) 
      .crossFade() 
      .diskCacheStrategy(DiskCacheStrategy.ALL) 
      .into(holder.thumbnail); 
関連する問題