2016-05-30 4 views
0

Я пытаюсь добавить изображения с моей SD-карты в android к gridview. Я читаю изображения с помощью этого метода:Динамическое добавление изображений в gridview в 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 "); 
      } 
     } 

Теперь я передаю выше значений в 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, который вызывается только один раз, в соответствии с жизненным циклом.

Теперь, как мне изменить свой код, чтобы динамически добавлять изображения в мое gridview.

Пожалуйста, помогите мне ответить на этот вопрос.

ответ

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

Благодарим за ответ. Но добавление: 'gridViewAdapter.notifyDataSetChanged();' in onResume сработало. 'Public void onResume() { super.onResume(); gridViewAdapter.notifyDataSetChanged(); Log.d (TAG, «Привет из фрагмента галереи в резюме»); } ' – learner

Смежные вопросы