تابستون داره تموم میشه ها، فرصت‌ها محدودن کلی آفر جذاب در کمپین تابستون🔥👇
۰ ثانیه
۰ دقیقه
۰ ساعت
۳ مهدی رستمی پور
اضافه شدن آتیم جدید هنگام سرچ!
جامعه جاوا (اندروید) ایجاد شده در ۰۱ مرداد ۱۴۰۰

با سلام

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

 

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

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

 

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

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

 

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

 

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

@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) {
    }
});

سلام وقت بخیر

 

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

 

یک پیشنهاد:

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

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

 

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

 

پوریا شفیعی ۰۱ مرداد ۱۴۰۰، ۱۲:۳۸

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

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

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

میلاد عزیززاده ۰۱ مرداد ۱۴۰۰، ۱۲:۳۹

سلام مجدد

 

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

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

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);
    }
}
پوریا شفیعی ۰۲ مرداد ۱۴۰۰، ۰۵:۰۰