简体   繁体   English

Android notifyDataSetChanged是否不更新现有项目的视图?

[英]Android notifyDataSetChanged not updating view on existing items?

New to android and having a hard time figuring out why notifyDataSetChanged(); android 新手,很难弄清楚为什么notifyDataSetChanged(); isn't updating items that were removed from view when reinserting them. 重新插入时不会更新从视图中删除的项目。 Working great when deleting items but not when restoring items back to view which were existing items in view. 在删除项目时工作得很好,但在将项目恢复为视图时又不是视图中的现有项目时,效果很好。 Any help is appreciated. 任何帮助表示赞赏。

UsersAdapter.java UsersAdapter.java

public class UsersAdapter extends RecyclerView.Adapter<UsersAdapter.UserViewHolder> {
private ArrayList<User> mDataSet;
private Context context;

private SQLiteDatabase db;

public UsersAdapter(ArrayList<User> mDataSet, Context context) {
    this.context = context;
    this.mDataSet = mDataSet;

    createDatabase();

}

public void createDatabase(){
    db=context.openOrCreateDatabase("xxx", Context.MODE_PRIVATE, null);
    db.execSQL("CREATE TABLE IF NOT EXISTS faces(id INTEGER PRIMARY KEY AUTOINCREMENT NOT NULL, name VARCHAR,url VARCHAR);");
}


@Override
public UserViewHolder onCreateViewHolder(ViewGroup parent, int viewType) {
    View v = LayoutInflater.from(parent.getContext()).inflate(R.layout.activity_favorites2, parent, false);
    UserViewHolder userViewHolder = new UserViewHolder(v);
    return userViewHolder;
}

@Override
public void onBindViewHolder(UserViewHolder holder, int position) {


    holder.name_entry.setText(mDataSet.get(position).getName());
    holder.email_entry.setText(mDataSet.get(position).getEmail());
    holder.icon_entry.setText(""+mDataSet.get(position).getName().charAt(0));

    String name = mDataSet.get(position).getName();
    String url = mDataSet.get(position).getEmail();

    Glide.with(context)
            .load(url)
            .asBitmap()
            .placeholder(R.drawable.ic_blank)
            .error(R.drawable.ic_blank)
            .into(holder.ivFavorites);
}

@Override
public int getItemCount() {
    return mDataSet.size();
}

public class UserViewHolder extends RecyclerView.ViewHolder {
    CardView cardView;
    TextView name_entry, email_entry, icon_entry;
    ImageView ivFavorites;

    UserViewHolder(View itemView) {
        super(itemView);
        cardView = (CardView) itemView.findViewById(R.id.user_layout);
        name_entry = (TextView) itemView.findViewById(R.id.name_entry);
        email_entry = (TextView) itemView.findViewById(R.id.email_entry);
        icon_entry = (TextView) itemView.findViewById(R.id.icon_entry);
        ivFavorites = (ImageView) itemView.findViewById(R.id.ivFavorites);

        Typeface fontFamily2 = Typeface.createFromAsset(context.getAssets(), "fonts/fontawesome-webfont.ttf");
        TextView fontFamilyText2 = (TextView) itemView.findViewById(R.id.fontAwesomeDirectLink);
        fontFamilyText2.setTypeface(fontFamily2);
        fontFamilyText2.setText("\uf0c1");
        fontFamilyText2.setTextColor(ContextCompat.getColor(context, R.color.bg_screen3));
        fontFamilyText2.setOnClickListener(new View.OnClickListener() {
            public void onClick(View view) {
                context = view.getContext();
                final User mDataSet2 = mDataSet.get(getAdapterPosition());;
                String url = mDataSet2.getEmail();
                String name = mDataSet2.getName();
                ClipboardManager clipboard = (ClipboardManager) context.getSystemService(Context.CLIPBOARD_SERVICE);
                ClipData clip = ClipData.newPlainText("xxx direct link", url);
                clipboard.setPrimaryClip(clip);
                Snackbar snackbar = Snackbar
                        .make(view, "Copied " + name + "!", Snackbar.LENGTH_LONG)
                        .setActionTextColor(context.getResources().getColor(R.color.bg_screen3))
                        .setAction("ADD IMG TAGS", new View.OnClickListener() {
                            @Override
                            public void onClick(View view) {
                                context = view.getContext();
                                final User mDataSet2 = mDataSet.get(getAdapterPosition());;
                                String url = mDataSet2.getEmail();
                                String name = mDataSet2.getName();
                                ClipboardManager clipboard = (ClipboardManager) context.getSystemService(Context.CLIPBOARD_SERVICE);
                                ClipData clip = ClipData.newPlainText("xxx direct link with image tags", "[img]" + url + "[/img]");
                                clipboard.setPrimaryClip(clip);
                                Snackbar snackbar1 = Snackbar.make(view, "Added image tags!", Snackbar.LENGTH_SHORT);
                                snackbar1.show();
                            }
                        });

                snackbar.show();
            }
        });

        Typeface fontFamily3 = Typeface.createFromAsset(context.getAssets(), "fonts/fontawesome-webfont.ttf");
        TextView fontFamilyText3 = (TextView) itemView.findViewById(R.id.fontAwesomeImageTagLink);
        fontFamilyText3.setTypeface(fontFamily3);
        fontFamilyText3.setText("\uf00d");
        fontFamilyText3.setTextColor(ContextCompat.getColor(context, R.color.dot_dark_screen1));
        fontFamilyText3.setOnClickListener(new View.OnClickListener() {
            public void onClick(View view) {
                context = view.getContext();
                final User mDataSet3 = mDataSet.get(getAdapterPosition());;
                String url = mDataSet3.getEmail();
                String name = mDataSet3.getName();
                String query = "DELETE FROM faces WHERE url = ('"+url+"');";
                db.execSQL(query);
                mDataSet.remove(getAdapterPosition());
                notifyDataSetChanged();
                Snackbar snackbar = Snackbar
                        .make(view, name + " Removed!", Snackbar.LENGTH_LONG)
                        .setActionTextColor(context.getResources().getColor(R.color.dot_dark_screen1))
                        .setAction("UNDO", new View.OnClickListener() {
                            @Override
                            public void onClick(View view) {
                                context = view.getContext();
                                final User mDataSet3 = mDataSet.get(getAdapterPosition());;
                                String url = mDataSet3.getEmail();
                                String name = mDataSet3.getName();
                                String query = "INSERT INTO faces (name,url) VALUES('"+name+"', '"+url+"');";
                                db.execSQL(query);
                                Snackbar snackbar3 = Snackbar.make(view, name + " Favorited!", Snackbar.LENGTH_SHORT);
                                snackbar3.show();
                            }
                        });
                snackbar.show();
            }
        });


        Typeface fontFamily4 = Typeface.createFromAsset(context.getAssets(), "fonts/fontawesome-webfont.ttf");
        TextView fontFamilyText4 = (TextView) itemView.findViewById(R.id.fontAwesomeShare);
        fontFamilyText4.setTypeface(fontFamily4);
        fontFamilyText4.setText("\uf1e0");
        fontFamilyText4.setTextColor(ContextCompat.getColor(context, R.color.bg_screen3));
        fontFamilyText4.setOnClickListener(new View.OnClickListener() {
            public void onClick(View view) {
                context = view.getContext();
                final User mDataSet2 = mDataSet.get(getAdapterPosition());;
                String url = mDataSet2.getEmail();
                String name = mDataSet2.getName();
                Drawable mDrawable = ivFavorites.getDrawable();
                Bitmap mBitmap = ((BitmapDrawable) mDrawable).getBitmap();
                Bitmap imageWithBG = Bitmap.createBitmap(600, 600, mBitmap.getConfig());  // Create another image the same size
                imageWithBG.eraseColor(Color.WHITE);  // set its background to white, or whatever color you want
                Canvas canvas = new Canvas(imageWithBG);  // create a canvas to draw on the new image
                canvas.drawBitmap(mBitmap, 175, 100, null); // draw old image on the background
                String path = MediaStore.Images.Media.insertImage(context.getContentResolver(),
                        imageWithBG, "xxx", null);
                Uri uri = Uri.parse(path);
                final Intent shareIntent = new Intent(Intent.ACTION_SEND); // THIS IS SLOW 
                shareIntent.putExtra(Intent.EXTRA_STREAM, uri);
                shareIntent.setType("image/*");
                context.startActivity(shareIntent);
            }
        });

    }
}

@Override
public void onAttachedToRecyclerView(RecyclerView recyclerView) {
    super.onAttachedToRecyclerView(recyclerView);
}
}

Replace Your Snackbar code 替换您的小吃店代码

Snackbar snackbar = Snackbar
                        .make(view, name + " Removed!", Snackbar.LENGTH_LONG)
                        .setActionTextColor(context.getResources().getColor(R.color.dot_dark_screen1))
                        .setAction("UNDO", new View.OnClickListener() {
                            @Override
                            public void onClick(View view) {
                                context = view.getContext();
                                final User mDataSet3 = mDataSet.get(getAdapterPosition());;
                                String url = mDataSet3.getEmail();
                                String name = mDataSet3.getName();
                                String query = "INSERT INTO faces (name,url) VALUES('"+name+"', '"+url+"');";
                                db.execSQL(query);
                                mDataSet.add(mDataSet3);
                                 notifyDataSetChanged();
                                Snackbar snackbar3 = Snackbar.make(view, name + " Favorited!", Snackbar.LENGTH_SHORT);
                                snackbar3.show();
                            }
                        });
                snackbar.show();

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

相关问题 notifydatasetchanged()不更新回收站视图 - notifydatasetchanged() is not updating the recycler view 回收者视图未通过 notifyDataSetChanged() 更新; - Recycler view not updating with notifyDataSetChanged(); ListView项未使用notifyDataSetChanged()更新 - ListView items aren't updating with notifyDataSetChanged() 添加数据时notifyDataSetChanged()不更新列表视图 - notifyDataSetChanged() not updating list view when adding data 适配器上的notifydataSetChanged将使用新项目进行更新,但不会更新现有项目 - notifydataSetChanged on Adapter will update with new items, but will not update the existing items 调用notifyDataSetChanged后,Android ListView不会更新 - Android ListView not updating after a call to notifyDataSetChanged Android BaseAdapter.notifyDataSetChanged()不刷新视图 - Android BaseAdapter.notifyDataSetChanged() does not refresh view 重新排序 Android 回收站视图中的项目后,position 未更新 - After reordering the items in Android recycler view the position is not updating notifydatasetchanged后recyclerview不更新 - recyclerview not updating after notifydatasetchanged ArrayAdapter 未使用 notifyDataSetChanged() 进行更新 - ArrayAdapter not updating with notifyDataSetChanged()
 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM