رفتن به مطلب
  • 0

تعریف رویداد onClick برای اجزای recyclerView


howsen

سوال

سلام دوستان. خسته نباشید؛ من در حال یادگیری برنامه‌نویسی اندروید هستم و به تازگی مبحث ریسایکلر ویو رو شروع کردم و به یک مشکلی بر خوردم. ممنون میشم اگه تا آخر حوصله کنید و سوال رو بخونید! :laugh:

من برای ایجاد ریسایکلر ویو خودم به این شکل عمل کردم:

1- تعریف داده‌ها که همگی به صورت آرایه‌ی رشته‌ای هستن.

2- ساخت لیوت برای هر سطر ریسایکلر ویو که از کارد ویو استفاده کردم.

3- ساخت آداپتر برای ریسایکلر ویو.

4- اتصال آداپتر به ریسایکلر ویو.

اول بزارید آداپتر رو باهم مرور کنیم.

package com.example.testapp;

import android.support.annotation.NonNull;
import android.support.v7.widget.RecyclerView;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;
import android.widget.TextView;

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

    private String[] dataString;
    public RecyclerAdapter(String[] dataString){
        this.dataString = dataString;
    }

    @NonNull
    @Override
    public ViewHolder onCreateViewHolder(@NonNull ViewGroup viewGroup, int i) {
        View view = LayoutInflater.from(viewGroup.getContext()).inflate(R.layout.recycler_card, viewGroup, false);
        return new ViewHolder(view);
    }

    @Override
    public void onBindViewHolder(@NonNull ViewHolder viewHolder, int i) {
        viewHolder.textView.setText(dataString[i]);
    }

    @Override
    public int getItemCount() {
        return dataString.length;
    }

    public class ViewHolder extends RecyclerView.ViewHolder {
        TextView textView;
        public ViewHolder(@NonNull View itemView) {
            super(itemView);
            textView = itemView.findViewById(R.id.textView);
        }
    }
}

 

حالا مشکل اینجاست که من در Layout مربوط هر سطر ریسایکلر ویو یک ،Text View قرار دادم و این‌طور که اطلاع دارم برای تعریف Listener اجزایی که در داخل لیوت  ریسایکلر ویو قرار دارن باید از متد onBindViewHolder استفاده کرد. حالا من چطور می‌تونم برای این تکست ویو که در داخل لیوت مربوط به ریسایکلر ویو قرار داره رویداد کلیک قرار بدم؟ مثلا اگه بخوام یه پیغام تُست نشون بده، context رو چی بزارم؟

 

مرسی که حوصله کردید و تا آخر خوندینش : )

 

لینک ارسال
به اشتراک گذاری در سایت های دیگر

2 پاسخ به این سوال تاکنون داده شده است

ارسال‌های توصیه شده

در 11 دقیقه قبل، howsen گفته است :

 

 

سلام خدمت شما. توصیه میشه که کلیک رو توی onBind تعریف نکنید. بهترین جا برای تعریف توی خود ViewHolder هست.به صورت زیر ViewHolder رو  بازنویسی کنید.

public class ViewHolder extends RecyclerView.ViewHolder {
        TextView textView;

        public ViewHolder(@NonNull View itemView) {
            super(itemView);

            textView = itemView.findViewById(R.id.textView);
            textView.setOnClickListener(new View.OnClickListener() {
                @Override
                public void onClick(View v) {
                    Toast.makeText(itemView.getContext(),dataString[getAdapterPosition()],Toast.LENGTH_LONG).show();
                }
            });
        }
    }

 

لینک ارسال
به اشتراک گذاری در سایت های دیگر

در 2 ساعت قبل، محمدرضا شاهپیری گفته است :

سلام خدمت شما. توصیه میشه که کلیک رو توی onBind تعریف نکنید. بهترین جا برای تعریف توی خود ViewHolder هست.به صورت زیر ViewHolder رو  بازنویسی کنید.


public class ViewHolder extends RecyclerView.ViewHolder {
        TextView textView;

        public ViewHolder(@NonNull View itemView) {
            super(itemView);

            textView = itemView.findViewById(R.id.textView);
            textView.setOnClickListener(new View.OnClickListener() {
                @Override
                public void onClick(View v) {
                    Toast.makeText(itemView.getContext(),dataString[getAdapterPosition()],Toast.LENGTH_LONG).show();
                }
            });
        }
    }

 

 

بسیار ممنون!  ♥

لینک ارسال
به اشتراک گذاری در سایت های دیگر

بایگانی شده

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

  • کاربران آنلاین در این صفحه   0 کاربر

    • هیچ کاربر عضوی،در حال مشاهده این صفحه نیست.
×
×
  • اضافه کردن...