Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/android/185.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Android 使用ContentProvider的适配器notifyDataSetChanged()_Android_Android Recyclerview_Android Contentprovider_Android Adapter - Fatal编程技术网

Android 使用ContentProvider的适配器notifyDataSetChanged()

Android 使用ContentProvider的适配器notifyDataSetChanged(),android,android-recyclerview,android-contentprovider,android-adapter,Android,Android Recyclerview,Android Contentprovider,Android Adapter,您好,我正在使用ContentProvider,在通过单击按钮删除元素后,适配器不会通知您,如果我返回并再次返回,元素将被删除。因此ContentProvider可以工作,但notifyDataSetChanged();没有 public class CategoriesPreferedAdapter extends RecyclerView.Adapter<CategoriesPreferedAdapter.ViewHolder> { private List<Model

您好,我正在使用ContentProvider,在通过单击按钮删除元素后,适配器不会通知您,如果我返回并再次返回,元素将被删除。因此ContentProvider可以工作,但notifyDataSetChanged();没有

public class CategoriesPreferedAdapter extends RecyclerView.Adapter<CategoriesPreferedAdapter.ViewHolder> {


private List<ModelCategoriesProvider> feedItemList;
private Context mContext;

public CategoriesPreferedAdapter(Context context, List<ModelCategoriesProvider> feedItemList) {
    this.feedItemList = feedItemList;
    this.mContext = context;
}

@Override
public CategoriesPreferedAdapter.ViewHolder onCreateViewHolder(ViewGroup parent, int viewType) {
    LayoutInflater inflater = LayoutInflater.from(parent.getContext());
    View itemView = inflater.inflate(R.layout.categories_prefered_adapter, parent, false);

    return new CategoriesPreferedAdapter.ViewHolder(itemView);

}


@Override
public void onBindViewHolder(CategoriesPreferedAdapter.ViewHolder holder, final int position) {
    //holder.titleTextView.setText(mList[position]);
    final ModelCategoriesProvider feedItem = feedItemList.get(position);
    holder.setClickListener(new ItemClickListener() {
        @Override
        public void onClick(View view, int position, boolean isLongClick) {

            Toast.makeText(view.getContext(),""+feedItem.getId()+"  Users Delete",Toast.LENGTH_LONG).show();
            if (isLongClick) {
            }


        }

    });



    holder.title.setText(feedItem.getName());

    Glide.with(mContext)
            .load(Links.ImagePath+feedItem.getImage())
            .centerCrop()
            // .placeholder(R.drawable.ic_porosiicon)
            .crossFade()
            .into(holder.categoryImage);

    System.out.println("image path "+feedItem.getImage());

    holder.delete_category.setOnClickListener(new View.OnClickListener() {
        @Override
        public void onClick(View view) {
            //deleteId(feedItem.getId()+"");
            String[] whereArgs = {feedItem.getId()+""};
            int count  = mContext.getContentResolver().delete(UsersProvider.CONTENT_URI,UsersProvider.PID+" =?",whereArgs);
            // System.out.println("count erald mjeshtri + mbreti ndaj thuaj princ ndaj thuaj mbret: "+count);
            //EventBus.getDefault().post(new Db_Update("update"));
            notifyDataSetChanged();

        }
    });

}

@Override
public int getItemCount() {
    return (null != feedItemList ? feedItemList.size() : 0);
}

public static class ViewHolder extends RecyclerView.ViewHolder
        implements View.OnClickListener, View.OnLongClickListener{
    private TextView title,data,type,amount,billnr;
    private ImageView categoryImage,delete_category;
    private ItemClickListener clickListener;
    CardView card_view;


    public ViewHolder(View itemView) {
        super(itemView);
        card_view = (CardView) itemView.findViewById(R.id.card_view);

        title = (TextView) itemView.findViewById(R.id.repoName);
        categoryImage = (ImageView) itemView.findViewById(R.id.imageView_category);
        delete_category = (ImageView) itemView.findViewById(R.id.imageViewfavourites);
        itemView.setTag(itemView);
        itemView.setOnClickListener(this);
        itemView.setOnLongClickListener(this);

    }

    public void setClickListener(ItemClickListener itemClickListener) {
        this.clickListener = itemClickListener;
    }

    @Override
    public void onClick(View view) {
        clickListener.onClick(view, getPosition(), false);
    }

    @Override
    public boolean onLongClick(View view) {
        clickListener.onClick(view, getPosition(), true);
        return true;
    }
}
公共类CategoriesPreferedAdapter扩展了RecyclerView.Adapter{
私有列表feedItemList;
私有上下文;
公共分类引用适配器(上下文上下文,列表feedItemList){
this.feedItemList=feedItemList;
this.mContext=上下文;
}
@凌驾
公共类别PreferedAdapter.ViewHolder onCreateViewHolder(视图组父级,int-viewType){
LayoutInflater充气器=LayoutInflater.from(parent.getContext());
视图项视图=充气机。充气(R.layout.categories\u Preferred\u adapter,parent,false);
返回新的CategoriesPreferedAdapter.ViewHolder(itemView);
}
@凌驾
BindViewHolder上的公共无效(CategoriesPreferedAdapter.ViewHolder,最终整型位置){
//holder.titleTextView.setText(mList[position]);
最终模型分类Provider feedItem=feedItemList.get(位置);
holder.setClickListener(新项目ClickListener(){
@凌驾
公共void onClick(视图、int位置、布尔值isLongClick){
Toast.makeText(view.getContext(),“”+feedItem.getId()+“用户删除”,Toast.LENGTH_LONG.show();
如果(单击){
}
}
});
holder.title.setText(feedItem.getName());
使用(mContext)滑动
.load(Links.ImagePath+feedItem.getImage())
.centerCrop()
//.占位符(R.drawable.ic_porosicon)
.crossFade()
.进入(持有人类别图像);
System.out.println(“图像路径”+feedItem.getImage());
holder.delete_category.setOnClickListener(新视图.OnClickListener(){
@凌驾
公共void onClick(视图){
//deleteId(feedItem.getId()+);
字符串[],其中RGS={feedItem.getId()+“”};
int count=mContext.getContentResolver().delete(UsersProvider.CONTENT\u URI,UsersProvider.PID+“=?”,wherergs);
//System.out.println(“计数erald mjeshtri+mbreti ndaj thuaj princ ndaj thuaj mbret:+count”);
//EventBus.getDefault().post(新的数据库更新(“更新”);
notifyDataSetChanged();
}
});
}
@凌驾
public int getItemCount(){
返回值(null!=feedItemList?feedItemList.size():0);
}
公共静态类ViewHolder扩展了RecyclerView.ViewHolder
实现View.OnClickListener、View.OnLongClickListener{
私有文本视图标题、数据、类型、金额、账单编号;
private ImageView类别图像,删除_类别;
私有项clickListener clickListener;
卡视图卡视图;
公共视图持有者(视图项视图){
超级(项目视图);
card\u view=(cardwiew)itemView.findviewbyd(R.id.card\u view);
title=(TextView)itemView.findViewById(R.id.repoName);
categoryImage=(ImageView)itemView.findViewById(R.id.ImageView\u category);
delete_category=(ImageView)itemView.findViewById(R.id.ImageViewFavorites);
setTag(itemView);
setOnClickListener(这个);
setOnLongClickListener(此);
}
public void setClickListener(项ClickListener项ClickListener){
this.clickListener=itemClickListener;
}
@凌驾
公共void onClick(视图){
单击Listener.onClick(视图,getPosition(),false);
}
@凌驾
仅长按公共布尔值(视图){
单击Listener.onClick(视图,getPosition(),true);
返回true;
}
}

}

确保在内容提供商的删除方法中调用notifyChange。它的工作方式是,当附加到任何视图的数据被更新时,notifyChange方法将更新通知该视图。因此,请确保调用了
getContext().getContentResolver().notifyChange(uri,null)在您的CP中的delete方法内

另一个原因可能是,您多次初始化连接到recyclerview适配器的arraylist/list。在这种情况下,从适配器到列表的链接将丢失,您必须再次
setAdapter
。建议的方法是调用列表中的
clear
,然后调用
addAll
。 像这样:

list.clear();
list.addAll(your_new_data);
如果有帮助,请告诉我。
谢谢

我遇到了和你一样的问题,我用这种方式解决了这个问题: 在我的视图中,我有一个数组“ArrayBookTable”,我用它填充循环视图。 当您想通知回收商时,可以使用ArrayList名称并调用此方法

public static void notifyRecycler(){
  arrayBootable.clear();
  arrayBootable.addAll(bootable());
  favouriteAdapter.notifyDataSetChanged();
}

尝试在通过处理程序在UI线程上发布数据的runnable中使用notifyDataSetChanged()

在实用程序方法中定义处理程序

private static Handler mainHandler = new Handler(Looper.getMainLooper());

public static void postOnUiThread(Runnable runnable) {
        mainHandler.post(runnable);
    }
然后在代码中:

Utility.postOnUiThread(new Runnable() {
            @Override
            public void run() {
                // call notifyDataSetChanged here
            }
        });

ContentProvider
中删除是可以的,但是您没有从
AdapterList
中删除,在
notifyDataSetChange
之前,从
ArrayList
中删除

feedItemList.移除(位置)


希望有帮助。

请提供完整的代码。可能您在adapter中使用了不同的列表。我在adapter中提供了完整的代码,可以这样更新onClick方法<代码>holder.delete_category.setOnClickListener(新视图.OnClickListener(){@Override public void onClick(视图视图){//deleteId(feedItem.getId()+);String[]wherergs={feedItem.getId()+“”};int count=mContext.getContentResolver().delete(UsersProvider.CONTENT\u URI,UsersProvider.PID+“”?“,wherergs);feedItemList.remove(position)notifyDataSetChanged();})从ContentProvider中删除是可以的,但您没有从AdapterList中删除,在notifyDataSetChange之前,从ArrayList中删除,如feedItemList.remove(位置)。希望如此helps@RameshKumar完成了是的,第二个答案是重点,我知道