2016-05-30 7 views
0

Ich versuche, Bilder von meiner SD-Karte in android Gridview hinzuzufügen. Ich lese Bilder mit dieser Methode:Dynamisch Hinzufügen von Bildern zur Gridview in Android

 public void getImages() 
     { 
      File mediaStorageDir = new File(Environment.getExternalStoragePublicDirectory(
        Environment.DIRECTORY_PICTURES), "AppsCameraSpy"); 
      if(mediaStorageDir.exists()) 
      { 
       String[] strings = mediaStorageDir.list(); 
       imageTitles = new ArrayList<String>(Arrays.asList(strings)); 
       Log.d(TAG, "the files are: " + imageTitles); 

      } 
      try 
      { 
       for(File file : mediaStorageDir.listFiles()) 
       { 
        files.add(file); 
        images.add(BitmapDrawable.createFromPath(file.getAbsolutePath())); 
       } 
      } 
      catch (Exception e) 
      { 
       e.printStackTrace(); 
       Log.d(TAG,"Got some exceptoin "); 
      } 
     } 

Nun, ich über Werte an die gridview bin vorbei:

public View onCreateView(LayoutInflater inflater, ViewGroup container, 
          Bundle savedInstanceState) { 
     // Inflate the layout for this fragment 
     View view = inflater.inflate(R.layout.fragment_gallery, container, false); 

     gridView = (GridView)view.findViewById(R.id.gridView); 
     Log.d(TAG,"I am gallery"); 
     getImages(); 

     gridView.setAdapter(new GridViewAdapter(getActivity(),images,imageTitles,files)); 

     return view; 
    } 

Alles funktioniert gut. Aber das Problem ist, wenn neue Bilder zum Ordner AppsCameraSpy hinzugefügt werden, zeigt meine Rasteransicht sie nicht an.

Da ich Adapter in onCreateView setze, die nur einmal aufgerufen wird, je nach dem Lebenszyklus.

Nun, wie soll ich meinen Code ändern, um Bilder dynamisch zu meinem Gridview hinzuzufügen.

Bitte helfen Sie mir, diese Frage zu beantworten.

Antwort

1

Ich habe einen neuen Code in Ihrem vorhandenen hinzugefügt. Ich hoffe, der folgende Code wird für Sie funktionieren

public View onCreateView(LayoutInflater inflater, ViewGroup container, 
         Bundle savedInstanceState) { 
    // Inflate the layout for this fragment 
    View view = inflater.inflate(R.layout.fragment_gallery, container, false); 

    gridView = (GridView)view.findViewById(R.id.gridView); 
    Log.d(TAG,"I am gallery"); 
    getImages(); 

    GridViewAdapter adapter = new GridViewAdapter(getActivity(),images,imageTitles,files); 
    gridView.setAdapter(adapter); 

    Handler handler = new Handler(); 

    final Runnable r = new Runnable() { 
     public void run() { 
      getImages(); 
      adapter.adapter.notifyDataSetChanged(); 
      handler.postDelayed(this, 1000); 
     } 
    }; 
    handler.postDelayed(r, 1000); 


    return view; 
} 
+0

Vielen Dank für die Antwort. Aber hinzufügen: 'gridViewAdapter.notifyDataSetChanged();' in onResume arbeitete.public void onResume() { super.onResume(); gridViewAdapter.notifyDataSetChanged(); Log.d (TAG, "Hallo aus Galerie Fragment im Lebenslauf"); } ' – learner

Verwandte Themen