gpt4 book ai didi

android - GridView 在 notifyDataSetChanged() 之后没有更新

转载 作者:行者123 更新时间:2023-11-29 19:10:34 26 4
gpt4 key购买 nike

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

最佳答案

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

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

永远不要在将适配器设置为 GridView 之前调用通知方法。

关于android - GridView 在 notifyDataSetChanged() 之后没有更新,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/45529629/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com