2016-05-30 16 views
0

私のSDカードからアンドロイドの画像をgridviewに追加しようとしています。私は、このメソッドを使用して画像を読んでいます:アンドロイドでgridviewに画像を動的に追加する

 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 "); 
      } 
     } 

を今、私はGridViewのに値の上方を通過しています:

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; 
    } 

すべてが正常に動作します。しかし、問題は、新しい画像がフォルダAppsCameraSpyに追加された場合、私のグリッドビューはそれらを表示していないことです。

私はonCreateViewにアダプタを設定しています。これは、ライフサイクルごとに1回だけ呼び出されます。

今、グリッドビューに画像を動的に追加するためにコードを変更する必要があります。

この質問にお答えします。

答えて

1

あなたの既存のコードに新しいコードを追加しました。私は願っています次のコードはあなたのために動作します

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

ありがとうございます。ただし、onResumeの 'gridViewAdapter.notifyDataSetChanged();'が追加されました。 'public void onResume(){ super.onResume(); gridViewAdapter.notifyDataSetChanged(); Log.d(TAG、 "再開時にギャラリーの断片からこんにちは"); } ' – learner

関連する問題