3

Ich habe eine Basis-Navigationsschublade, die ein Fragment lädt. Das Fragment hat eine RecyclerView in seinem Layout. Der RecyclerView hat einen Adapter, der Glide verwendet, um Bilder aus meinem lokalen Ordner zu laden. Ich habe eine detailView-Aktivität, um das Vollbild anzuzeigen. In der Vollbildansicht habe ich eine Menüoption, um das aktuelle Bild zu löschen. Meine Logik physisch die Datei löschen, aber die Löschung nicht in der Galerie reflektiert (ich meine, das Bild zeigt noch bis ich eine andere Tätigkeit navigieren und kommen zurück.Löschen eines Bildes, das nicht in der Galerie angezeigt wird

BaseActivity.java

public class BaseActivity extends AppCompatActivity 
     implements NavigationView.OnNavigationItemSelectedListener { 

    protected RelativeLayout relativeLayout; 

    @Override 
    protected void onCreate(Bundle savedInstanceState) { 

     relativeLayout = (RelativeLayout) findViewById(R.id.content_frame); 

     super.onCreate(savedInstanceState); 
     setContentView(R.layout.activity_base); 
     Toolbar toolbar = (Toolbar) findViewById(R.id.toolbar); 
     setSupportActionBar(toolbar); 

     DrawerLayout drawer = (DrawerLayout) findViewById(R.id.drawer_layout); 
     ActionBarDrawerToggle toggle = new ActionBarDrawerToggle(
       this, drawer, toolbar, R.string.navigation_drawer_open, R.string.navigation_drawer_close); 
     drawer.setDrawerListener(toggle); 
     toggle.syncState(); 

     NavigationView navigationView = (NavigationView) findViewById(R.id.nav_view); 
     navigationView.setNavigationItemSelectedListener(this); 

     Fragment item1Fragment = new Item1Fragment(); 
     FragmentTransaction fragmentTransaction = getSupportFragmentManager().beginTransaction(); 
     fragmentTransaction.add(R.id.content_frame, item1Fragment, null); 
     fragmentTransaction.commit(); 
    } 

    @Override 
    public void onBackPressed() { 
     DrawerLayout drawer = (DrawerLayout) findViewById(R.id.drawer_layout); 
     if (drawer.isDrawerOpen(GravityCompat.START)) { 
      drawer.closeDrawer(GravityCompat.START); 
     } else { 
      super.onBackPressed(); 
     } 
    } 

    @Override 
    public boolean onCreateOptionsMenu(Menu menu) { 
     getMenuInflater().inflate(R.menu.base, menu); 
     return true; 
    } 

    @Override 
    public boolean onOptionsItemSelected(MenuItem item) { 
     int id = item.getItemId(); 
     if (id == R.id.action_settings) { 
      return true; 
     } 

     return super.onOptionsItemSelected(item); 
    } 

    @SuppressWarnings("StatementWithEmptyBody") 
    @Override 
    public boolean onNavigationItemSelected(MenuItem item) { 
     int id = item.getItemId(); 
     FragmentTransaction fragmentTransaction = this.getSupportFragmentManager().beginTransaction(); 
     if (id == R.id.nav_camera) { 
      Fragment item1Fragment = new Item1Fragment(); 
      fragmentTransaction.replace(R.id.content_frame, item1Fragment); 
      fragmentTransaction.commit(); 
     } else if (id == R.id.nav_gallery) { 
      Fragment item2Fragment = new Item2Fragment(); 
      fragmentTransaction.replace(R.id.content_frame, item2Fragment); 
      fragmentTransaction.commit(); 
     } else if (id == R.id.nav_slideshow) { 
      Toast.makeText(getApplicationContext(), "333", Toast.LENGTH_SHORT).show(); 
     } else if (id == R.id.nav_manage) { 
      Toast.makeText(getApplicationContext(), "444", Toast.LENGTH_SHORT).show(); 
     } else if (id == R.id.nav_share) { 
      Toast.makeText(getApplicationContext(), "555", Toast.LENGTH_SHORT).show(); 
     } else if (id == R.id.nav_send) { 
      Toast.makeText(getApplicationContext(), "666", Toast.LENGTH_SHORT).show(); 
     } 

     DrawerLayout drawer = (DrawerLayout) findViewById(R.id.drawer_layout); 
     drawer.closeDrawer(GravityCompat.START); 
     return true; 
    } 
} 

Basis Aktivität Layout

<?xml version="1.0" encoding="utf-8"?> 
<android.support.v4.widget.DrawerLayout xmlns:android="http://schemas.android.com/apk/res/android" 
    xmlns:app="http://schemas.android.com/apk/res-auto" 
    xmlns:tools="http://schemas.android.com/tools" 
    android:id="@+id/drawer_layout" 
    android:layout_width="match_parent" 
    android:layout_height="match_parent" 
    android:background="@color/colorPrimary" 
    android:fitsSystemWindows="true" 
    tools:openDrawer="start"> 

    <include 
     layout="@layout/app_bar_base" 
     android:layout_width="match_parent" 
     android:layout_height="match_parent" /> 

    <RelativeLayout 
     android:id="@+id/content_frame" 
     android:layout_width="match_parent" 
     android:layout_height="match_parent" /> 

    <android.support.design.widget.NavigationView 
     android:id="@+id/nav_view" 
     android:layout_width="wrap_content" 
     android:layout_height="match_parent" 
     android:layout_gravity="start" 
     android:fitsSystemWindows="true" 
     app:headerLayout="@layout/nav_header_base" 
     app:menu="@menu/activity_base_drawer" /> 

</android.support.v4.widget.DrawerLayout> 

Fragment

public class Item1Fragment extends Fragment { 
    String absPath = "storage/sdcard/DCIM/Camera"; 
    File targetDir = new File(absPath); 
    android.view.ActionMode actionMode; 
    private ArrayList<ImageModel> data = new ArrayList<>(); 
    private GalleryAdapter mAdapter; 
    private RecyclerView mRecyclerView; 
    private Map<String, String> contactNameMap = new HashMap<>(); 

    @Override 
    public View onCreateView(LayoutInflater inflater, ViewGroup container, 
          Bundle savedInstanceState) { 
     List<File> fileList = getAllFiles(targetDir); 
     for (int i = 0; i < fileList.size(); i++) { 

      ImageModel imageModel = new ImageModel(); 
      imageModel.setName(fileList.get(i).getName()); 
      try { 
       imageModel.setUrl(fileList.get(i).toURI().toURL().toString()); 
      } catch (MalformedURLException e) { 
       Toast.makeText(getActivity(), e.getLocalizedMessage(), Toast.LENGTH_LONG).show(); 
      } 
      data.add(imageModel); 
     } 
     View view = inflater.inflate(R.layout.fragment_item1, container, false); 
     mRecyclerView = (RecyclerView) view.findViewById(R.id.list1); 
     if (getResources().getConfiguration().orientation == Configuration.ORIENTATION_LANDSCAPE) { 
      mRecyclerView.setLayoutManager(new GridLayoutManager(getActivity(), 3)); 
     } else { 
      mRecyclerView.setLayoutManager(new GridLayoutManager(getActivity(), 2)); 
     } 

     mRecyclerView.setHasFixedSize(true); 
     mAdapter = new GalleryAdapter(getActivity(), data); 
     mRecyclerView.setAdapter(mAdapter); 
     mRecyclerView.addOnItemTouchListener(new RecyclerItemClickListener(getActivity(), 
       new RecyclerItemClickListener.OnItemClickListener() { 
        @Override 
        public void onItemClick(View view, int position) { 
         Intent intent = new Intent(getActivity(), DetailActivity.class); 
         intent.putParcelableArrayListExtra("data", data); 
         intent.putExtra("pos", position); 
         intent.putExtra("origin", "Item1Fragment"); 
         intent.putExtra("url", absPath); 
         startActivity(intent); 
        } 
       })); 
     return view; 
    } 

    @Override 
    public void onDetach() { 
     super.onDetach(); 
    } 

    private boolean IsSupportedFile(String filePath) { 
     String ext = filePath.substring((filePath.lastIndexOf(".") + 1), 
       filePath.length()); 

     if (Arrays.asList("jpg", "jpeg", 
       "png") 
       .contains(ext.toLowerCase(Locale.getDefault()))) 
      return true; 
     else 
      return false; 

    } 

    public ArrayList<File> getAllFiles(File directory) { 
     ArrayList<File> filePaths = new ArrayList<File>(); 
     if (directory.isDirectory()) { 
      File[] listFiles = directory.listFiles(); 
      if (listFiles.length > 0) { 
       for (int i = 0; i < listFiles.length; i++) { 
        String filePath = listFiles[i].getAbsolutePath(); 
        if (IsSupportedFile(filePath)) { 
         filePaths.add(listFiles[i]); 
        } 
       } 
      } else { 
       Toast.makeText(
         getActivity(), 
         "Album is empty. Please load some images in it !", 
         Toast.LENGTH_LONG).show(); 
      } 
     } else { 
      Toast.makeText(
        getActivity(), 
        " directory path is not valid! Please set the image directory name AppConstant.java class", 
        Toast.LENGTH_LONG).show(); 
     } 
     return filePaths; 
    } 
} 

Fragment Layout

<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android" 
    xmlns:tools="http://schemas.android.com/tools" 
    android:layout_width="match_parent" 
    android:layout_height="match_parent" 
    xmlns:app="http://schemas.android.com/apk/res-auto" 
    tools:context="com.akl.nav2.Item1Fragment"> 

    <android.support.v7.widget.RecyclerView 
     android:id="@+id/list1" android:background="#FFBB00" 
     android:layout_width="match_parent" 
     android:layout_height="match_parent" 
     app:layout_behavior="@string/appbar_scrolling_view_behavior" /> 
</RelativeLayout> 

GalleryAdapter

public class GalleryAdapter extends RecyclerView.Adapter<RecyclerView.ViewHolder> { 

    private Context context; 
    private List<ImageModel> data = new ArrayList<>(); 
    private SparseBooleanArray selectedItems; 

    public GalleryAdapter(Context context, List<ImageModel> data) { 
     this.context = context; 
     this.data = data; 
     selectedItems = new SparseBooleanArray(); 
    } 

    public void addData(ImageModel newModelData, int position) { 
     data.add(position, newModelData); 
     notifyItemInserted(position); 
    } 

    public void removeData(int position) { 
     data.remove(position); 
     notifyItemRemoved(position); 
    } 

    public void toggleSelection(int pos) { 
     if (selectedItems.get(pos, false)) { 
      selectedItems.delete(pos); 
     } else { 
      selectedItems.put(pos, true); 
     } 
     notifyItemChanged(pos); 
    } 

    public void clearSelections() { 
     selectedItems.clear(); 
     notifyDataSetChanged(); 
    } 

    public int getSelectedItemCount() { 
     return selectedItems.size(); 
    } 

    public List<Integer> getSelectedItems() { 
     List<Integer> items = new ArrayList<Integer>(selectedItems.size()); 
     for (int i = 0; i < selectedItems.size(); i++) { 
      items.add(selectedItems.keyAt(i)); 
     } 
     return items; 
    } 

    @Override 
    public RecyclerView.ViewHolder onCreateViewHolder(ViewGroup parent, int viewType) { 
     RecyclerView.ViewHolder viewHolder; 
     View v; 
     v = LayoutInflater.from(parent.getContext()).inflate(
       R.layout.list_item, parent, false); 
     viewHolder = new MyItemHolder(v); 

     return viewHolder; 
    } 

    @Override 
    public void onBindViewHolder(RecyclerView.ViewHolder holder, int position) { 
     holder.itemView.setActivated(selectedItems.get(position, false)); 
     Glide.with(context).load(data.get(position).getUrl()) 
       .thumbnail(0.5f) 
       .override(200, 200) 
       .crossFade() 
       .skipMemoryCache(true) 
       .diskCacheStrategy(DiskCacheStrategy.NONE) 
       .into(((MyItemHolder) holder).mImg); 
    } 

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

    public static class MyItemHolder extends RecyclerView.ViewHolder { 
     ImageView mImg; 

     public MyItemHolder(View itemView) { 
      super(itemView); 
      mImg = (ImageView) itemView.findViewById(R.id.item_img); 
     } 
    } 
} 
+0

Haben Sie Ihr Problem gelöst werden? Ich kann dir helfen, es immer noch zu konfrontieren. – Pehlaj

+0

@ P.Rai Hallo, ich suche immer noch nach einer Lösung. Ihre Hilfe würde sicher geschätzt werden. – Adi

Antwort

0

Glide eine Kopie gegen jede URL erstellt, so dass Sie, wenn ein File-Objekt mit der angegebenen URL und überprüfen erstellen müssen, ob Datei existiert oder nicht.

Änderungen in onBindViewHolder:

File file = new File(data.get(position).getUrl()); 
if(file.exists()) { 
    Glide.with(context).load(data.get(position).getUrl()) 
    .thumbnail(0.5f) 
    .override(200, 200) 
    .crossFade() 
    .skipMemoryCache(true) 
    .diskCacheStrategy(DiskCacheStrategy.NONE) 
    .into(((MyItemHolder) holder).mImg); 
} else { 
    //File doesn't exist 
}