- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
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/
我正在尝试在我的 recyclerview 方法上实现此方法 Changing background color of selected item in recyclerview 我正确地遵循了脚本,
我有一个列表,其中填充了自定义 ArrayAdapter。 我想每秒更新一个进度条,所以我尝试使用 notifyDataSetChanged() 来重新绘制列表,但它似乎不起作用。 最佳答案 您如何更
我正在改进我的应用程序稳定性和性能,但现在我遇到了来自 Android Studio 的警告。请考虑以下适配器类: private class CoinsAdapter(private val fra
我正在制作一个Android来做名为list track的列表应用程序,现在我仍在研究该应用程序的基础知识。无论如何,我为列表 View 创建了一个上下文菜单,该上下文菜单只有1个选项“删除”,它的意
我想从另一个线程调用adapter.notifyDataSetChanged()。我读到我应该使用 AsyncTask 并在执行后执行 adapter.notifyDataSetChanged() 。
我知道这个问题已被问过数千次,但由于某种原因我找不到适合我的情况的答案。 我拥有的是一个从 Web 服务获取数据并用信息填充列表的线程。然后我想按下一个按钮并调用同一线程来获取更多数据并将其添加到列表
friend , 我正在为 android ListView 使用以下自定义适配器我面临的问题是调用 notifydatasetchanged() 后位置错误; 我第一次将数据与列表位置绑定(bind
我在 windows 7 64bit 下使用 android 1.6当我从扩展 BaseAdapter 的适配器对象调用 notifyDataSetChanged() 时,我得到了运行时异常 我尝试使
我有一个类 Myadapter extends BaseAdapter.in Myadapter 我更改了 MyListView 数据然后调用 notifyDataSetChanged() 方法,比如
我一直在寻找年龄并尝试了几个月。我永远无法让我的观点(任何观点)无效。这里有什么问题,任何人都可以告诉我吗?谁能告诉我如何使用这些无效方法。提前致谢! if(resul
在我的 Activity 中,我有两个 ListView ,因此我使用了两个不同的适配器。我的要求是在两个列表项中我都有一个按钮。单击任何 ListView 中的按钮,两个 ListView 中的数据
我有一个用于我的 ListView 的适配器,然后我需要使用 SensorChange 方法中的 notifydatasetchanged 方法刷新它。你知道 SensorChange 方法被频繁快速
我正在使用 FragmentStatePagerAdapter 来实现 VerticalPageAdapter 的目的,我必须为与 Button< 相关的相同 Fragment 创建动态编号 被按下,
这个问题在这里已经有了答案: Custom Adapter getView() method is not called (6 个答案) 关闭 7 年前。 这是我的代码我想在 ListView 中显
我正在尝试做的事情: 按下添加按钮时,将值从 EditText 插入到数据库。 用数据库中的数据填充 ListView 。 问题: 当我单击添加按钮时,它会将值插入到数据库中,但不会将其填充到 Lis
我正在尝试制作一个像 tinder 一样刷卡的应用程序。我有一个 Texview 上面有一些文字,当我刷下一张卡片时有另一个文字等等。我还想做的是当我单击一个按钮以删除屏幕上的卡片并转到下一张时。我正
我正在制作一个程序,该程序将寻找与手机蓝牙设备配对的程序,显示它们及其地址以供用户查看,并且当用户已经在他的手机中打开 Bt 时它工作正常。当他不这样做时会出现问题,导致添加到 arrayList 中
有人可以向我解释以下问题的来源: 我有一个列表,根据某些偏好显示多个项目。用户可以通过 SlidingDrawer 更改这些首选项。每当发生这种情况时,我都会获得与新首选项相对应的项目,然后使用以下代
我有一个 ListView ,它使用不同类中的基本适配器显示来 self 的数据库的多个数据。每次我删除或添加一个项目到我的数据库时,我都想刷新我的 ListView 。 这是我的代码,但它没有刷新我
在我的代码中,我有两个 Activity 。 一个是 ListView Activity ,另一个 Activity 用于修改数据。修改数据后,用户将返回到 ListView Activity 。 我
我是一名优秀的程序员,十分优秀!