2017-06-08 4 views
0

Wenn ich versuche, ein Element aus Recyclerview (Full Image Activity) zu löschen, rufe ich onfinish() Methode, um zurück zur vorherigen Aktivität, d. H. recyclerview(GalleryActivity).Die Recycler-Ansicht wird nicht aktualisiert, wenn ich ein Objekt aus der Recycler-Ansicht lösche?

Aber das Bild, das ich lösche, ist immer noch sichtbar, und wenn ich die Galerie-Aktivität verlasse und erneut eingebe, wird es aktualisiert.

Jede Lösung, damit es aktualisiert werden kann, wenn das Element gelöscht wird. When i delete an image this thing appears

Das ist mein Recyclerview Adapter

public class RecyclerViewAdapter erweitert RecyclerView.Adapter {

private ArrayList<String> yeniliste; 
private Context context; 

public RecyclerViewAdapter(Context context, ArrayList<String> itemList) { 
    this.yeniliste = itemList; 
    this.context = context; 
} 

@Override 
public RecyclerViewHolders onCreateViewHolder(ViewGroup parent, int viewType) { 
    View layoutView = LayoutInflater.from(parent.getContext()).inflate(R.layout.gallery_item, null); 
    RecyclerViewHolders rcv = new RecyclerViewHolders(layoutView); 
    return rcv; 
} 

@Override 
public void onBindViewHolder(final RecyclerViewHolders holder, final int position) { 
    Bitmap bitmap = BitmapFactory.decodeFile(yeniliste.get(position)); 
    holder.countryPhoto.setImageBitmap(bitmap); 
    holder.countryPhoto.setOnClickListener(new View.OnClickListener() { 
     @Override 
     public void onClick(View v) { 
      Intent intent = new Intent(v.getContext(),GalleryFullImage.class); 
      intent.putExtra("realid",String.valueOf(holder.getAdapterPosition())); 
      v.getContext().startActivity(intent); 
     } 
    }); 
} 

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


public static class RecyclerViewHolders extends RecyclerView.ViewHolder implements View.OnClickListener{ 

    public ImageView countryPhoto; 

    public RecyclerViewHolders(View itemView) { 
     super(itemView); 
     countryPhoto = (ImageView)itemView.findViewById(R.id.country_photo); 
    } 

    @Override 
    public void onClick(View view) { 
     Toast.makeText(view.getContext(), "Clicked Country Position = " + getAdapterPosition(), Toast.LENGTH_SHORT).show(); 

    } 

} 

public void removeItem(int position) 
{ 
    yeniliste.remove(position); 
    notifyItemRemoved(position); 
    notifyItemRangeChanged(position, yeniliste.size()); 
}} 

removeItem Verfahren ist auch nicht funktioniert. Dies ist meine vollständige Bildaktivität. Wenn ich Bild von hier lösche. GalleryActivity wird nicht aktualisiert.

public class GalleryFullImage extends AppCompatActivity { 
String idPath; 
String realid; 
ArrayList<String> stringList; 
@Override 
protected void onCreate(Bundle savedInstanceState) { 
    super.onCreate(savedInstanceState); 
    setContentView(R.layout.gallery_fullimage); 

    stringList = new ArrayList<>(); 
    String targetPath= Environment.getExternalStorageDirectory().getAbsolutePath() + "/My Images/"; 
    File targetDirector = new File(targetPath); 
    File[] files = targetDirector.listFiles(); 
    Arrays.sort(files, new Comparator() 
    { 
     public int compare(Object o1, Object o2) { 

      if (((File)o1).lastModified() > ((File)o2).lastModified()) { 
       return -1; 
      } else if (((File)o1).lastModified() < ((File)o2).lastModified()) { 
       return +1; 
      } else { 
       return 0; 
      } 
     } 

    }); 
    for (File file : files){ 
     stringList.add(file.getAbsolutePath()); 
    } 

    Intent i = getIntent(); 
    idPath = i.getStringExtra("realid"); 
    realid = stringList.get(Integer.parseInt(idPath)); 
    Log.d("wow",realid); 
    File imgFile = new File(realid); 
    if(imgFile.exists()) { 
     Bitmap myBitmap = BitmapFactory.decodeFile(imgFile.getAbsolutePath()); 
     ImageView myImage = (ImageView) findViewById(R.id.gallery_fullimg); 
     myImage.setImageBitmap(myBitmap); 
     myImage.setOnTouchListener(new ImageMatrixTouchHandler(getApplicationContext())); 
    } 
} 
@Override 
public boolean onCreateOptionsMenu(Menu menu) { 

    getMenuInflater().inflate(R.menu.delete, menu); 

    return true; 
} 
@Override 
public boolean onOptionsItemSelected(MenuItem item) { 

    final int id = item.getItemId(); 

    if (id == R.id.action_delete) { 
     AlertDialog.Builder alertDialog = new AlertDialog.Builder(GalleryFullImage.this); 
     alertDialog.setTitle("Confirm Delete..."); 
     alertDialog.setMessage("Are you sure you want delete this?"); 
     alertDialog.setPositiveButton("YES", new DialogInterface.OnClickListener() { 
      public void onClick(DialogInterface dialog,int which) { 
       RecyclerViewAdapter rcAdapter = new RecyclerViewAdapter(getApplicationContext(), stringList); 
       rcAdapter.removeItem(Integer.parseInt(idPath)); 
       File file = new File(realid); 
       boolean deleted = file.delete(); 
       Log.v("log_tag","deleted: " + deleted); 
       Toast.makeText(GalleryFullImage.this,"File Deleted", Toast.LENGTH_SHORT).show(); 
       finish(); 
      } 
     }); 
     alertDialog.setNegativeButton("NO", new DialogInterface.OnClickListener() { 
      public void onClick(DialogInterface dialog, int which) { 
       Toast.makeText(getApplicationContext(), "You clicked on NO", Toast.LENGTH_SHORT).show(); 
       dialog.cancel(); 
      } 
     }); 
     alertDialog.show(); 
     return true; 
    } 
    return super.onOptionsItemSelected(item); 
}} 

Dies ist GalleryActivity .

public class GalleryActivity extends AppCompatActivity { 
ArrayList<String> stringList; 

@Override 
protected void onCreate(Bundle savedInstanceState) { 
    super.onCreate(savedInstanceState); 
    setContentView(R.layout.activity_gallery); 
    setTitle("Gallery"); 
    stringList = new ArrayList<>(); 
    String targetPath= Environment.getExternalStorageDirectory().getAbsolutePath() + "/My Images/"; 
    File targetDirector = new File(targetPath); 
    File[] files = targetDirector.listFiles(); 
    Arrays.sort(files, new Comparator() 
    { 
     public int compare(Object o1, Object o2) { 

      if (((File)o1).lastModified() > ((File)o2).lastModified()) { 
       return -1; 
      } else if (((File)o1).lastModified() < ((File)o2).lastModified()) { 
       return +1; 
      } else { 
       return 0; 
      } 
     } 

    }); 
    for (File file : files){ 
     stringList.add(file.getAbsolutePath()); 
    } 

    RecyclerView rView = (RecyclerView)findViewById(R.id.recycler_view); 
    RecyclerView.LayoutManager layoutManager = new GridLayoutManager(getApplicationContext(),2); 
    rView.setHasFixedSize(true); 
    rView.setLayoutManager(layoutManager); 
    RecyclerViewAdapter rcAdapter = new RecyclerViewAdapter(getApplicationContext(), stringList); 
    rView.setAdapter(rcAdapter); 


} 
@Override 
protected void onResume() { 
    super.onResume(); 
}} 
+0

benachrichtigte Sie Adapter: https://developer.android.com/reference/android/support/v7/widget/RecyclerView.Adapter.html#notifyDataSetChanged() –

+0

Ja, ich habe notifyAdapter(), aber Problem noch gleich? –

+0

auch löschen aus der Liste, die 'stringList' in' GalleryAdapter' –

Antwort

0

stellen Sie Ihren Code in setImage() -Methode wie dieser Aufruf dieser Methode in onCreate und onResume: -

public void setImage(){ 
    stringList.clear(); 
    String targetPath= 
    Environment.getExternalStorageDirectory().getAbsolutePath() + "/My Images/"; 
    File targetDirector = new File(targetPath); 
    File[] files = targetDirector.listFiles(); 
Arrays.sort(files, new Comparator() 
{ 
    public int compare(Object o1, Object o2) { 

     if (((File)o1).lastModified() > ((File)o2).lastModified()) { 
      return -1; 
     } else if (((File)o1).lastModified() < ((File)o2).lastModified()) { 
      return +1; 
     } else { 
      return 0; 
     } 
    } 

}); 
for (File file : files){ 
    stringList.add(file.getAbsolutePath()); 
} 

RecyclerView rView = (RecyclerView)findViewById(R.id.recycler_view); 
RecyclerView.LayoutManager layoutManager = new GridLayoutManager(getApplicationContext(),2); 
rView.setHasFixedSize(true); 
rView.setLayoutManager(layoutManager); 
RecyclerViewAdapter rcAdapter = new RecyclerViewAdapter(getApplicationContext(), stringList); 
rView.setAdapter(rcAdapter); 

} 

Hoffnung Dies ist hilfreich;

+0

Es gibt ein Problem. Das Bild, das gelöscht wird, verschwindet, aber es wird durch ein weißes bg ersetzt. und als ich auf den weißen Hintergrund geklickt habe. Das Bild, das an der Position +1 war, erscheint. –

+0

@TusharPingale in welcher Aktivität weiß bg zeigen in voller Bild-Aktivität oder Galerie Aktivität – SSALPHAX

+0

http://i.imgur.com/uVedqjr.png check this –

1

dies in GalleryActivity Do

@Override 
protected void onResume() { 
    super.onResume(); 
    if(rView != null){ 
     yourAdapter.notifyDataSetChanged(); 
    } 

}; 

Machen Sie den rview und den Adapter globale Variablen.

+0

rview ist meine Recyclerview, rcAdapter ist mein Adapter. –

+0

Bearbeitet die Antwort –

+0

die Lösung funktioniert, aber es gibt ein Problem. Das Bild, das gelöscht wird, verschwindet, aber es wird durch ein weißes bg ersetzt. und als ich auf den weißen Hintergrund geklickt habe. Das Bild, das an der Position +1 war, erscheint. –

Verwandte Themen