Dies ist das Fragment, in dem ich Bild mit camera2basic (Google Sample) erfassen.Fragment in ViewPager nicht aktualisiert
Und diese Methode i die Galerie mit den neuesten aufgenommenen Bild zu aktualisieren, bin mit:
private void refreshGallery(File file)
{
Intent intent = new Intent(Intent.ACTION_MEDIA_SCANNER_SCAN_FILE);
intent.setData(Uri.fromFile(file));
getActivity().sendBroadcast(intent);
}
Und das ist die Galerie Fragment, wo ich alle Bilder zeige, gespeichert in SD-Karte:
ist hier mit einer MainActivity ViewPager, die 5 Fragmente ist mit:
- FragmentHome
- FragmentGallery
- FragmentCamera
- FragmentStar
- FragmentProfile
und innerhalb FragmentGallery, gibt es eine andere ViewPager (GalleryViewPager), die 2 Fragmente aufweist, ist:
- FragmentPhotos
- FragmentVideos
Nun, wie Sie die CameraFragment ist in einem ViewPager sehen können, von MainActivity und die FragmentPhotos (die alle Fotos der Galerie zeigen) befinden sich in einem anderen ViewPager in FragmentGallery. Jetzt, wenn ich auf das Foto klicke und zu FragmentPhotos navigiere (in FragmentGallery), wird die Galerie aktualisiert und ein kürzlich angeklicktes Bild angezeigt (nur zum ersten Mal), aber wenn ich auf weitere Bilder klicke und zu FragmentPhotos zurückkehre (in FragmentGallery) die Galerie doesn 't wird aktualisiert !!! Auch wenn ich auf einen anderen Tab (anders als Tab1, Tab2 und Tab3 zB Tab4 oder Tab5) ziehe, dh wenn der ViewPager zerstört wird, dann wird die Galerie jedes Mal ohne Probleme aktualisiert !!! Bitte helfen Sie mir, wie Sie das Fragment in ViewPager aktualisieren. Obwohl ich versucht habe, es mit notifysetchanged zu aktualisieren, aber es hatte keine Wirkung.
der Galerie zu initiieren ich die initGallery nenne() von MainActivity auf Tab-Auswahl (wenn die ausgewählte Registerkarte ist die Galerie Fragment), wie:
ViewPager viewPager = (ViewPager) findViewById(R.id.pagerGallery);
GalleryViewPagerAdapter adapter = (GalleryViewPagerAdapter) viewPager.getAdapter();
for (int i = 0; i < adapter.getCount(); i++) {
Fragment fragmentObject = (Fragment) viewPager.getAdapter().instantiateItem(viewPager, i);
if (fragmentObject instanceof FragmentPhotos) {
FragmentPhotos fragment = (FragmentPhotos) fragmentObject;
if (fragment != null) {
((FragmentPhotos) fragment).initGallery();
Log.e("", "Gallery called");
}
}
}
und die folgende ist mein PagerAdpater:
public class GalleryViewPagerAdapter extends FragmentStatePagerAdapter {
private final List<Fragment> mFragments = new ArrayList<>();
private final List<String> mFragmentTitles = new ArrayList<>();
int numOfTabs;
public GalleryViewPagerAdapter(FragmentManager fm) {
super(fm);
}
public void addFragment(Fragment fragment, String title)
{
mFragments.add(fragment);
mFragmentTitles.add(title);
}
@Override
public int getItemPosition(Object object) {
return POSITION_NONE;
}
@Override
public Fragment getItem(int position) {
return mFragments.get(position);
}
@Override
public int getCount() {
return mFragments.size();
}
@Override
public CharSequence getPageTitle(int position) {
return mFragmentTitles.get(position);
}
}
Es folgt initGallery():
public void initGallery()
{
{
new GetImagesFromCard().executeOnExecutor(AsyncTask.THREAD_POOL_EXECUTOR);
}
}
und GetImagesFromCard sich wie folgt:
private class GetImagesFromCard extends AsyncTask<Void,LoadedImage,Void>
{
Bitmap bitmap;
ArrayList<LoadedImage> bitmapArrays=new ArrayList<LoadedImage>();
@Override
protected Void doInBackground(Void... params) {
Uri uri = MediaStore.Images.Media.EXTERNAL_CONTENT_URI;
String[] projection = {MediaStore.Images.Media.DATE_TAKEN,MediaStore.Images.Media._ID,MediaStore.Images.Thumbnails._ID,MediaStore.Images.Thumbnails.DATA,MediaStore.Images.Media.DATE_TAKEN};
String orderBy = MediaStore.Images.Media.DATE_TAKEN + " DESC";
Cursor cursor = getActivity().getContentResolver().query(uri, projection, null, null, orderBy);
int columnIndex = cursor.getColumnIndexOrThrow(MediaStore.Images.Media._ID);
int size = cursor.getCount();
if (size==0)
{
}
int imageId =0;
int i=0;
while (i<size && !isCancelled())
{
cursor.moveToPosition(i);
imageId = cursor.getInt(columnIndex);
uri = Uri.withAppendedPath(MediaStore.Images.Media.EXTERNAL_CONTENT_URI, "" + imageId);
publishProgress(new LoadedImage(uri.toString()));
if (i==0)
{
new ShowImagesEnlarged(i).executeOnExecutor(AsyncTask.THREAD_POOL_EXECUTOR);
}
i++;
}
cursor.close();
return null;
}
@Override
protected void onProgressUpdate(LoadedImage... values) {
super.onProgressUpdate(values);
for (LoadedImage photo: values)
{
imageAdapter.addPhoto(photo);
imageAdapter.notifyDataSetChanged();
bitmapArrays.add(photo);
}
}
@Override
protected void onCancelled() {
Log.e("","Task Cancelled");
super.onCancelled();
}
}
bitte etwas Code zeigen, ich nehme an, Sie nicht über die Galerie Fragmente aktualisieren Inhalt, nachdem Sie gemacht ein Foto.Das erste Mal, wenn das Galeriefragment erstellt wird, lädt es alle Informationen aus der Galerie, danach wird das zwischengespeicherte Fragment innerhalb des Adapters angezeigt ... Also bitte Code aus der Fragment Instanziierung und dem Viewpager-Adapter ... – David
Jetzt können Sie helfen Ich @David –