اضافه شدن آتیم جدید هنگام سرچ!

پرسیده شده
فعالیت 1013 روز پیش
دیده شده 381 بار
0

با سلام

من زمانیکه سرچ میکنم و نتیجه پیدا میشه و سپس وقتی از حالت سرچ خارج میشم و تمامی اطلاعات هستن ، از آن موردی که سرچ کردم ۱ مورد دیگر به آیتم ها اضافه میشه

 

یعنی در جدول ۱ مورد پرداخت قبض هست

بعد از سرچ پرداخت قبض ، ۲ مورد در آیتم ها پرداخت قبض وجود دارد و ۱عدد موقع سرچ اون مورد اضافه میشود!

 

اگر هم هنگام سرچ مورد های مشابه دیگری وجود داشته باشد اون آیتم ها هم اضافه میشوند!

و از برنامه خارج میشم و دوباره وارد برنامه میشم اون آیتم هایی که اضافه شدند نیستن!

 

خیلی بررسی کردم اما دلیلش رو پیدا نکردم

 

سورس کد کوئری سرچ:

@Query("SELECT * FROM tbl_contactss WHERE name LIKE '%' || :key || '%'")
List<Model> search(String key);

سورس کد ادپتر:

public void setSearch(List<Model> model){

    this.models=model;
    notifyDataSetChanged();
}

 

سورس کد اکتیویتی اصلی:

search.addTextChangedListener(new TextWatcher() {
    @Override
    public void beforeTextChanged(CharSequence s, int start, int count, int after) {

    }

    @Override
    public void onTextChanged(CharSequence s, int start, int before, int count) {

        if (s.length()>0){

            List<Model> models1=dataDao.search(s.toString());
            adapter.setSearch(models1);

        }else {
            List<Model> tasks = dataDao.getItem();
            adapter.addAll(tasks);
        }

    }

    @Override
    public void afterTextChanged(Editable s) {

    }
});
فایل پیوست

مهدی رستمی پور
مهدی رستمی پور

1 مرداد 00

0
حذف شده

سلام وقت بخیر

 

لطف کنید کدتون(java) ارسال کنید یا پیوست کنید تا دلیل رو بررسی کنم.

 

یک پیشنهاد:

اما پیشنهاد میکنم از اونجایی که دارید پروژه میزنید و از دانسته های قبلیتون استفاده میکنید  برای تمرین دیباگ کردن پروژه ابتدا پروژه تون رو دیباگ کنید یعنی breakpoint بذارید و عمل دیباگ کردن رو انجام بدید(نه صرفا نگاه کردن کد ها) و به دنبال علت این موضوع بگردید (دقیقا همین جاهاست که شما رو برنامه نویس خوبی میکنه )

همچنین سورس کد این پروژه در جلسه بعدی قرار داده شده که میتونید با کد خودتون مطابقت بدید (اما بهتون پیشنهاد نمیکنم فعلا سراغش برید مگر اینکه چندین بار تلاش کرده باشید)

 

اگر چنین کاری کردید و علت رو پیدا کردید حتما در همین تاپیک بنویسید تا سایر دوستانی که در اینده ممکن هست به چنین مشکلی بخورند از تاپیک شما استفاده کنند.

 

فایل پیوست

پوریا شفیعی

توسط

پوریا شفیعی

1 مرداد 00

حذف شده
با سلام تشکر از شما سورس کد ها به پرسش اضافه شد عملیات سرچ درست انجام میشه اما آیتم جدیدی که سرچ میشه اضافه میشه مشکلم هست
مهدی رستمی پور

1 مرداد 00

0
حذف شده

سلام وقت بخیر مهدی جان

دیتابیستون مشکلی نداره مشکل داخل Adapter ریسایکلر ویوتون هست به احتمال زیاد متدی که باهاش تسک ها رو میگیری و یا اد میکنی مشکل داره

برای راهنمایی بیشتر از پروژه و کدهاتون شات بزارین

فایل پیوست

میلاد عزیززاده گلنگشی

توسط

میلاد عزیززاده گلنگشی

1 مرداد 00

حذف شده
با سلام تشکر از شما سورس کد ها به پرسش اضافه شد
مهدی رستمی پور

1 مرداد 00

حذف شده
مهدی جان با توجه به سورس کدهاتون اگر سرچ درست عمل میکنه ولی وقتی edit text سرچ رو خالی میکنید این مشکل بوجود میاد پس متد addAll توی Adapter مشکل داره ب احتمال زیاد
حذف شده
میلاد جان سلام وقت بخیر ممنونم از پاسخ و همکاری ات ممنون میشم سوالات رو در تاپیک ها ادامه بدید تا سایر دوستانی که در اینده به مشکلات مشابه میخورند بتوانند از تاپیک ها استفاده کنند.?
پوریا شفیعی

2 مرداد 00

حذف شده
سلام پوریا جان سورس کدها درست ارسال بشه چشم
حذف شده
ولی اگر خارج از آکادمی هم مشکل برطرف بشه نحوه حل مشکل رو میگم بیان و به اشتراک بزارن
حذف شده
یکسری پروژه ها هم هستن که خارج از سرفصل ها طراحی میشن تا ساختار و کدهای پروژه مشاهده نشه نمیشه کمک کرد
حذف شده
بهتر هست قدم به قدم از سوال کننده درخواست بشه کدهاشون رو ارسال کنند و توضیحاتشون رو بدهند تا راهنمایی صورت بگیره?
پوریا شفیعی

2 مرداد 00

0
حذف شده

سلام مجدد

 

کد های صحیح ادپتر خدمت شما:

چنانچه مشکلتون حل نشد لطفا کد ها تون رو کامل ارسال کنید تا بررسی کنم.

import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;
import android.widget.CheckBox;
import android.widget.CompoundButton;

import androidx.annotation.NonNull;
import androidx.recyclerview.widget.RecyclerView;

import java.util.ArrayList;
import java.util.List;

public class TaskAdapter extends RecyclerView.Adapter<TaskAdapter.TaskViewHolder> {
    private List<Task> tasks = new ArrayList<>();
    private TaskItemEventListener eventListener;

    public TaskAdapter(TaskItemEventListener eventListener) {

        this.eventListener = eventListener;
    }

    @NonNull
    @Override
    public TaskViewHolder onCreateViewHolder(@NonNull ViewGroup parent, int viewType) {
        return new TaskViewHolder(LayoutInflater.from(parent.getContext()).inflate(R.layout.item_task, parent, false));
    }

    @Override
    public void onBindViewHolder(@NonNull TaskViewHolder holder, int position) {
        holder.bindTask(tasks.get(position));
    }

    public void addItem(Task task) {
        tasks.add(0, task);
        notifyItemInserted(0);
    }

    public void updateItem(Task task) {
        for (int i = 0; i < tasks.size(); i++) {
            if (task.getId() == tasks.get(i).getId()) {
                tasks.set(i, task);
                notifyItemChanged(i);
            }
        }
    }

    public void addItems(List<Task> tasks) {
        this.tasks.addAll(tasks);
        notifyDataSetChanged();
    }

    public void deleteItem(Task task) {
        for (int i = 0; i < tasks.size(); i++) {
            if (tasks.get(i).getId() == task.getId()) {
                tasks.remove(i);
                notifyItemRemoved(i);
                break;
            }
        }
    }

    public void clearItems() {
        this.tasks.clear();
        notifyDataSetChanged();
    }

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

    public void setTasks(List<Task> tasks) {
        this.tasks = tasks;
        notifyDataSetChanged();
    }

    public class TaskViewHolder extends RecyclerView.ViewHolder {
        private CheckBox checkBox;
        private View deleteBtn;

        public TaskViewHolder(@NonNull View itemView) {
            super(itemView);
            checkBox = itemView.findViewById(R.id.checkBox_task);
            deleteBtn = itemView.findViewById(R.id.btn_task_delete);
        }

        public void bindTask(final Task task) {
            checkBox.setOnCheckedChangeListener(null);
            checkBox.setChecked(task.isCompleted());
            checkBox.setText(task.getTitle());
            deleteBtn.setOnClickListener(new View.OnClickListener() {
                @Override
                public void onClick(View v) {
                    eventListener.onDeleteButtonClick(task);
                }
            });

            itemView.setOnLongClickListener(new View.OnLongClickListener() {
                @Override
                public boolean onLongClick(View v) {
                    eventListener.onItemLongPress(task);
                    return false;
                }
            });

            checkBox.setOnCheckedChangeListener(new CompoundButton.OnCheckedChangeListener() {
                @Override
                public void onCheckedChanged(CompoundButton buttonView, boolean isChecked) {
                    task.setCompleted(isChecked);
                    eventListener.onItemCheckedChange(task);
                }
            });
        }
    }

    public interface TaskItemEventListener {
        void onDeleteButtonClick(Task task);

        void onItemLongPress(Task task);

        void onItemCheckedChange(Task task);
    }


}
فایل پیوست

پوریا شفیعی

توسط

پوریا شفیعی

2 مرداد 00