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 之前,切勿调用通知方法。
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 之前,切勿调用通知方法。