2016-11-08 61 views
3

我將相機和圖庫(多選)中的圖像保存到內部存儲器中的文件夾中。我想在水平Recyclerview中顯示這些圖像。在行佈局中,有一個關閉按鈕以及imageview。我想在點擊關閉按鈕時從內部存儲中刪除圖像(文件)。我有兩個問題: 問題1:當我從圖庫中選擇圖像(單個或多個)時,圖像保存正確,但在Recyclerview中,圖庫中的圖像顯示在所有位置,即如果圖像中有2個圖像文件夾,我從圖庫中選擇1張圖片,然後在Recyclerview中,所有3個位置將只有圖庫中的圖像。 問題2:單擊關閉按鈕時如何從文件夾中刪除圖像?在Recyclerview中顯示來自內部存儲器的圖像

//Recyclerview Adapter 
 
public class RecycleImageAdapter extends RecyclerView.Adapter<RecycleImageAdapter.ViewHolder> { 
 

 
    private List<String> itemList; 
 
    private Context mContext; 
 

 
    public RecycleImageAdapter(Context context, List<String> itemList) { 
 
     this.itemList = itemList; 
 
     this.mContext = context; 
 
    } 
 

 
    @Override 
 
    public RecycleImageAdapter.ViewHolder onCreateViewHolder(ViewGroup parent, int viewType) { 
 
     View view = LayoutInflater.from(parent.getContext()).inflate(R.layout.imagelayout, parent, false); 
 
     return new RecycleImageAdapter.ViewHolder(view); 
 
    } 
 

 
    @Override 
 
    public void onBindViewHolder(final RecycleImageAdapter.ViewHolder holder, int position) { 
 
     for (int i= 0; i < itemList.size(); i++) { 
 
      Uri uri = Uri.parse(itemList.get(i)); 
 
      holder.setImageView(uri); 
 

 

 
     } 
 

 
    } 
 

 
    @Override 
 
    public int getItemCount() { 
 
     return this.itemList.size(); 
 
    } 
 

 
    class ViewHolder extends RecyclerView.ViewHolder implements View.OnClickListener{ 
 

 
     ImageView image, delbtn; 
 

 
     ViewHolder(View itemView) { 
 
      super(itemView); 
 
      image = (ImageView) itemView.findViewById(R.id.img_thumbnail); 
 
      delbtn = (ImageView)itemView.findViewById(R.id.del); 
 
      delbtn.setOnClickListener(this); 
 
     } 
 

 
     public void setImageView(Uri uri){ 
 
      Picasso.with(mContext).load(uri).into(new Target() { 
 
       @Override 
 
       public void onBitmapLoaded(Bitmap bitmap, Picasso.LoadedFrom from) { 
 
        image.setImageBitmap(bitmap); 
 
       } 
 

 
       @Override 
 
       public void onBitmapFailed(Drawable errorDrawable) { 
 
        Log.e("sammy_error"," "+errorDrawable); 
 
       } 
 

 
       @Override 
 
       public void onPrepareLoad(Drawable placeHolderDrawable) { 
 

 
       } 
 
      }); 
 
     } 
 

 
     @Override 
 
     public void onClick(View view) { 
 
      int position = getAdapterPosition(); 
 
      Toast.makeText(mContext, itemList.get(position), Toast.LENGTH_SHORT).show(); 
 
      itemList.remove(position); 
 
      notifyItemRemoved(position); 
 
      notifyItemRangeChanged(position, itemList.size()); 
 

 
\t \t \t //Here I'm getting ArrayIndexOutOfBoundsException 
 
      File file = new File(itemList.get(position)); 
 
      file.delete(); 
 
     } 
 
    } 
 
}
//in Fragment, code to load images 
 

 
File directory = new File(file_path); 
 
     File newfile[] = directory.listFiles(); 
 
     //finalImages is ArrayList<String> 
 
     if(finalImages!=null)finalImages.clear(); 
 

 
     for (int i= 0; i < newfile.length; i++) { 
 
      String path = "file://"+newfile[i].getAbsolutePath(); 
 
      finalImages.add(path); 
 
     } 
 

 
     recyladapter.notifyDataSetChanged();

+0

我很抱歉,我無法理解你的問題。你能否詳細解釋一下,以便我可以更好地幫助你? –

+0

我想要顯示來自特定文件夾的圖像,讓我們在Recyclerview的內部存儲中說「Arc」。我將庫中的圖像以及相機保存在Arc文件夾中。將圖像(從圖庫或相機)保存到Arc後,我使用片段中的上述代碼來顯示圖像。 –

+0

所以這個過程就像這樣:Camera Intent - > Captured image - >保存在Arc - > Fragment代碼中以在recyclerview中顯示圖像。或圖庫 - >所選圖像 - >保存在Arc - >碎片代碼以在recyclerview中顯示圖像。 –

回答

0

好吧,我不明白你的第一部分,更多的解釋。

在第二部分中,它非常簡單,只需將圖像路徑設置爲imageView標記即可。

imageView.setTag(imageAbsolutePath); 

,當你在圖片的點擊獲得從圖像視圖的標籤,並將其轉換爲文件這樣

File path = new File(imageView.getTag().toString()); 
path.delete(); 
+0

它不工作。 @Mustanser –

相關問題