我正在使用列表视图的自定义适配器来显示图像和标题.在我的应用程序中,我添加和删除列表中的项目,我必须在界面上显示更改.对数据的任何更改我从数据库中获取所有列表并将其存储在适配器列表中,然后调用adapter.notifyDataSetChanged(); 但界面没有显示任何变化.另一方面,当我直接添加或删除适配器中的项目时,它正确响应.我使用了简单的适配器和适配器.notifyDataSetChanged(); 工作正常,但对于自定义它没有响应.我也尝试过很多关于stackoverflow的解决方案但是没有工作.比如 适配器数据更改时更新列表视图
Adapter.notifyDataSetChanged()不起作用
我这样做就像在创造一样
enter code here
product_data = new ArrayList<Product>();
Bundle extras = getIntent().getExtras();
if (extras != null) {
value = extras.getInt("list_id");
}
product_data = db.getAllProductsstatus(value, 1);
Collections.reverse(product_data);
adapter = new ProductAdopter(this,
R.layout.listview_item_row, product_data, 2);
ListView listView1 = (ListView)findViewById(R.id.listView1);
listView1.setAdapter(adapter);
registerForContextMenu(listView1);
Run Code Online (Sandbox Code Playgroud)
并在onMenuItemSelected中
enter code here
@Override
public boolean onMenuItemSelected(int featureId, MenuItem item) {
AdapterView.AdapterContextMenuInfo info = (AdapterView.AdapterContextMenuInfo)item.getMenuInfo();
int menuItemIndex = item.getItemId();
String listItemName = adapter.getItem(info.position)._name;
int id = adapter.getItem(info.position)._id;
if(menuItemIndex == 0)
{
db.deleteProduct(adapter.getItem(info.position));
product_data …Run Code Online (Sandbox Code Playgroud) 首先我调用 MediaStore.ACTION_IMAGE_CAPTURE 意图打开相机然后我从这个函数中获取保存的捕获图像路径。
private String getLastImageId(){
String[] imageColumns = { MediaStore.Images.Media._ID, MediaStore.Images.Media.DATA };
String imageOrderBy = MediaStore.Images.Media._ID+" DESC";
Cursor imageCursor = managedQuery(MediaStore.Images.Media.EXTERNAL_CONTENT_URI, imageColumns, null, null, imageOrderBy);
if(imageCursor.moveToFirst()){
int id = imageCursor.getInt(imageCursor.getColumnIndex(MediaStore.Images.Media._ID));
String fullPath = imageCursor.getString(imageCursor.getColumnIndex(MediaStore.Images.Media.DATA));
//imageCursor.close();
return fullPath;
}else{
return "";
}
}
Run Code Online (Sandbox Code Playgroud)
然后我将该路径作为参数传递给产品对象属性。将该对象添加到由自定义适配器显示的产品列表中。我在 listView 中显示产品标题和图片
在定制的适配器类中,我得到产品从它获取产品标题和路径从路径制作位图并将其分配给包含图像视图的产品持有人,第一张照片以这种方式工作很好,但在第二张照片上它给出了例外java.lang.outofmemory 我也试过给出的解决方案
java.lang.OutOfMemoryError:位图大小超出 VM 预算 - Android
在产品适配器中这样做
public class ProductAdopter extends ArrayAdapter<Product> {
Context context;
int layoutResourceId;
ArrayList<Product> data = null;
public ProductAdopter(Context context, int layoutResourceId, ArrayList<Product> product_data) {
// TODO Auto-generated constructor …Run Code Online (Sandbox Code Playgroud)