GridView 在 notifyDataSetChanged() 之后没有更新

GridView not updating after notifyDataSetChanged()

GridView 在 notifyDataSetChanged() 后未更新 叫做

我有一个 Fragment,它有一个 GridView,它显示来自特定文件夹的图像,onclick 它需要一个新的 Activity 文件被删除并发送广播以更新 GridView . 我已经尝试 notifyDataSetChanged() 但 GridView 仍然没有更新,文件实际上被删除并且媒体存储使用

更新
String path = newString;
File myFile = new File(path);
boolean deleted = myFile.delete();
ContentResolver resolver = getContentResolver();
deleteFileFromMediaStore(resolver, myFile);

public void deleteFileFromMediaStore(final ContentResolver contentResolver, final File file) {
        String canonicalPath;

            try {
                canonicalPath = file.getCanonicalPath();
            } catch (IOException e) {
                canonicalPath = file.getAbsolutePath();
            }
            final Uri uri = MediaStore.Files.getContentUri("external");
            final int result = contentResolver.delete(uri,
                    MediaStore.Files.FileColumns.DATA + "=?", new String[] {canonicalPath});
            if (result == 0) {
                final String absolutePath = file.getAbsolutePath();
                if (!absolutePath.equals(canonicalPath)) {
                    contentResolver.delete(uri,
                            MediaStore.Files.FileColumns.DATA + "=?", new String[]{absolutePath});
                }
            }

    }

这是我正在尝试的代码

public class ImageGalfrag extends Fragment {
    private Cursor cursor;
     private int columnIndex;
    ImageView thumbV;
    ImageButton videoICON;
    GridView sdcardImages;
    ArrayList<Bitmap> bitmapArray = new ArrayList<Bitmap>();
    public static final String BROADCAST_UPDATE = "com.quest.fsrecorder.CommonFrags.ImageGalfrag.UPDATE";
//   @Override
//    public void onCreate(Bundle savedInstanceState) {


    final BroadcastReceiver broadcastReceiver = new BroadcastReceiver() {
        @Override
        public void onReceive(Context context, Intent intent1) {

                String action = intent1.getAction();

                  if (action.equals((BROADCAST_UPDATE))) {
                      ReloadImages();
                  }

        }
    };

    private void BroadCastDetails() {

            IntentFilter intentFilter = new IntentFilter();
            intentFilter.addAction(BROADCAST_UPDATE);
            getActivity().registerReceiver(broadcastReceiver, intentFilter);

    }

@Override
public View onCreateView(LayoutInflater inflater, ViewGroup container,
                         Bundle savedInstanceState) {
    return inflater.inflate(R.layout.gallery_gridview, container, false);
}
    @Override
    public void onActivityCreated(Bundle savedInstanceState) {
        super.onActivityCreated(savedInstanceState);
        BroadCastDetails();
        //setContentView(R.layout.gallery_gridview);
        try {
            String[] projection = {MediaStore.Images.Media._ID,
                    MediaStore.Images.Media.DATA,
                    MediaStore.Images.Media.TITLE,
                    MediaStore.Images.Media.DATE_MODIFIED};

            cursor = getActivity().getContentResolver().query(MediaStore.Images.Media.EXTERNAL_CONTENT_URI,
                    projection, // Which columns to return
                    MediaStore.Images.Media.DATA + " " +
                            "like ? ",
                    new String[]
                            {"%/" + getResources().
                                    getString(R.string.string_store_Images_folder) + "/%"},
                    MediaStore.Images.Media.DATE_MODIFIED);
            View v = getView();
            // Get the column index of the Thumbnails Image ID
            columnIndex = cursor.getColumnIndexOrThrow(MediaStore.Images.Media._ID);
            sdcardImages = (GridView) v.findViewById(R.id.PhoneImageGrid);
            sdcardImages.setAdapter(new ImageAdapter(getActivity()));
        } catch (IllegalArgumentException e) {
            e.printStackTrace();
        }
    }

    private class ImageAdapter extends BaseAdapter {
        private Context context;
        public ImageAdapter(Context localContext) {
            context = localContext;
        }
        public int getCount() {
            return cursor.getCount();
        }
        public Object getItem(int position) {
            return position;
        }
        public long getItemId(int position) {
            return position;
        }
        @Override
        public View getView(final int position, View convertView, ViewGroup parent) {
            ImageView imageView;
            View grid = null;
            try {
               // LayoutInflater inflater = getActivity().getLayoutInflater();
                if (convertView == null) {


                        LayoutInflater inflater = (LayoutInflater) getActivity().getSystemService
                                (Context.LAYOUT_INFLATER_SERVICE );
                        //grid = inflater.inflate(R.layout.gallery_view, null);
                    grid = inflater.inflate(R.layout.gallery_view, parent, false);


                } else {
                    grid = (View) convertView;
                }
            } catch (Exception e) {
                e.printStackTrace();
            }

            cursor.moveToPosition(position);
            int imageID = cursor.getInt(columnIndex);
            //grid = new View(mContext);

            TextView textView = (TextView) grid.findViewById(R.id.grid_text);
            textView.setText(cursor.getString(cursor.getColumnIndexOrThrow(MediaStore.Images.Media.TITLE)));
            thumbV = (ImageView) grid.findViewById(R.id.thumbImage);
//            thumbV.setImageURI(Uri.withAppendedPath(
//                    MediaStore.Images.Media.EXTERNAL_CONTENT_URI, "" + imageID));
                         String path =
                                 cursor.getString(cursor.getColumnIndexOrThrow(MediaStore.Images.Media.DATA));

                        path = "file:///" + path;
                        Glide.with(getActivity()).load(path)
                                .into(thumbV);
            final String  Data = cursor.getString(cursor.getColumnIndexOrThrow(MediaStore.Images.Media.DATA));
            ImageButton deleteBtn = (ImageButton)grid.findViewById(R.id.delete_btn);
            deleteBtn.setVisibility(View.INVISIBLE);


            grid.setOnClickListener(new View.OnClickListener() {
                @Override

                public void onClick(View v) {

                    //Do something
                    try {

                        String[] projection1 = {MediaStore.Images.Media.DATA, MediaStore.Images.Media.DATE_MODIFIED};
                        Cursor cursor1 = getActivity().getContentResolver().query(MediaStore.Images.Media.EXTERNAL_CONTENT_URI,
                                projection1, // Which columns to return
                                MediaStore.Images.Media.DATA + " " +
                                        "like ? ",
                                new String[]
                                        {"%/" + getResources().
                                                getString(R.string.string_store_Images_folder) + "/%"},
                                MediaStore.Images.Media.DATE_MODIFIED);
                        columnIndex = cursor1.getColumnIndexOrThrow(MediaStore.Images.Media.DATA);
                        cursor1.moveToPosition(position);
                        String imagePath = cursor1.getString(columnIndex);
                        Intent ImageIntent = new Intent(getActivity(), ZoomImageView.class);
                        ImageIntent.putExtra("ImageName", imagePath);

                        getActivity().startActivity(ImageIntent);

                    }
                    catch (Exception e ){

                    }

                }
            });



            return grid;
        }
    }

    @Override
    public void onResume() {
        super.onResume();
        sdcardImages.invalidateViews();
        sdcardImages.setAdapter(new ImageAdapter(getActivity()));
    }

    public void ReloadImages(){
         ImageAdapter  adapteraa = new ImageAdapter(getActivity());
        adapteraa.notifyDataSetChanged();
        sdcardImages.setAdapter(adapteraa);

    }

    @Override
    public void onDestroy() {
        super.onDestroy();
       getActivity().unregisterReceiver(broadcastReceiver);
    }
}

您在设置之前通知适配器,因此您看不到更改,

public void ReloadImages(){
        ImageAdapter  adapteraa = new ImageAdapter(getActivity());
        sdcardImages.setAdapter(adapteraa);
        adapteraa.notifyDataSetChanged();
    }

第二个 Cursor 仍然具有相同的数据,您需要将其重新加载到 ReloadImages 方法

您已经在 onActivityCreated 方法中为您的 gridview 设置了一个 adepter。您无需在 reloadImage() 方法中重新初始化它。只需使其全局化并仅在它为空时才重新初始化它。如果它不为空,只需调用 notifyDataSetChanged。

public void ReloadImages(){
              if(adapteraa == null){
                 adapteraa = new ImageAdapter(getActivity());
                 sdcardImages.setAdapter(adapteraa);
              } else{
                adapteraa.notifyDataSetChanged();
             }
    }

在将适配器设置为 gridview 之前,切勿调用通知方法。