آموزش های این وب سایت به صورت رایگان در دسترس است. اطلاعات بیشتر
بروز خطا
   [message]
اشتراک در سوال
رای ها
[dataList]

Recycler View

moin007  9 سال پیش  9 سال پیش
+1 0

سلام خدمت دوستان.من یه ریسایکلر ویو اداپتر دارم که میخوام روی هر ایتم که کلیک شد بره به لایه مخصوص خودش.اگه نیاز هست کدهارم ضمیمه کنم.

ممنون میشم پاسخ بدید.

0 0
لینک (9 سال پیش)
0 0
میشه یه توضیح مختصرم راجبش بدی دوست عزیز؟؟ (9 سال پیش)
0 0
خوب نوشته اونجا همه ی توضیحات رو که میتونید یه item click listener بهش اضافه کنید (9 سال پیش)
 برای این سوال 1 پاسخ وجود دارد.
پاسخ به سوال 
Hajhosseini  9 سال پیش
+3 0

سلام. برای نوشتن یک لیستنر روش به این صورت است.
مبدا: جایی که یک instance از آداپتر در اون ساخته میشود. مانند اکتیویتی
مقصد: جایی که لیستنر ارسال میشه و به یک اکشنی حساس میشه. مانند آداپتر

ابتدا یک کلاس لیستنر مانند زیر تعریف میکنید.

 public interface SampleClickListener {
    void onSampleClickedListener(int position);
}

میتونید همین ۳ خط کد رو توی آداپتر تعریف کنید (در بعضی شرایط ساخت کلاس استاندارده و در برخی شرایط توی آداپتر نوشتن. بستگی به سبک کد نویسیتون داره)

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

public class SampleRecyclerAdapter<T> extends RecyclerView.Adapter<SampleRecyclerAdapter.ViewHolder> {
    private ArrayList<T> array;
    private T item;
    private View view;
    private Context context;
    private int layoutId;
    private SampleClickListener listener;
public SampleRecyclerAdapter(Context _context, ArrayList<T> _array, int _layoutId, SampleRecyclerAdapter _listener) { // get listener from activity
context = _context; array = _array; // array is generic and can be any object you want. you can change it to yor custom object layoutId = _layoutId; listener = _listener; } public class ViewHolder extends RecyclerView.ViewHolder { public LinearLayout linearSample; public ViewHolder(View view, int viewType) { super(view); linearSample = (LinearLayout) view.findViewById(R.id.linearSample); } } @Override public ViewHolder onCreateViewHolder(ViewGroup parent, int viewType) { return new ViewHolder(LayoutInflater.from(parent.getContext()).inflate(R.layout.sample_item, parent, false), viewType);
} @Override public void onBindViewHolder(SampleRecyclerAdapter.ViewHolder holder, final int position) {
try { SampleObject myObject = (SampleObject) array.get(position); holder.itemView.setOnClickListener(new View.OnClickListener() { // در این خط میگیم اگر روی یک آیتم کلیک شد لیستنر کال شود @Override public void onClick(View v) { listener.onSampleClickedListener(position); } }); } catch (Exception e) { e.printStackTrace(); } } @Override public int getItemCount() { return array.size(); } public void notifyAdapter(ArrayList<T> _array){ array = _array; notifyDataSetChanged(); } }

برای مفهومی تر شدن، کدهای اکتیویتی رو هم قرار میدم.
کلاس SampleObject میتونه هر کلاسی باشه، به عنوان مثال من کلاس زیر رو میسازم.

 public class SampleObject{
    @SerializedName("id")
    public int id;
@SerializedName("title") public String title; }

کد اکتیویتی:

final ArrayList<SampleObject> sampleObjects = new ArrayList<SampleObject>();
        for (int i = 0; i < 10; i++) {
            SampleObject sampleObject = new SampleObject();
            sampleObject.id = i;
            sampleObject.title = "some title    " + i;
            sampleObjects.add(sampleObject)
        }
recyclerAdapter = new SampleRecyclerAdapter(getActivity(), sampleObjects, R.layout.sample_item, new SampleClickListener () {
@Override public void onSampleClickedListener(int position) {
Log.i("LOG",sampleObjects.get(position).title); } }); recyclerView.setHasFixedSize(true); LinearLayoutManager linearLayoutManager = new LinearLayoutManager(getActivity(), LinearLayoutManager.VERTICAL, false); recyclerView.setLayoutManager(linearLayoutManager); recyclerView.setItemAnimator(new DefaultItemAnimator()); recyclerView.setAdapter(recyclerAdapter);
0 0
شیوه قشنگی نوشتید اما @SerializedName چیه ؟ (9 سال پیش)
+2 0
توی کتابخانه GSON قرار داره. زمانی که شما میخوای فیلدهای دیتای دریافتی از سرور رو بگیری میتونی ازش استفاده کنی. برای زمانیه که استاندارد نامگذاری سرور و کلاینت متفاوت هست و شما میخوای فیلدهاتو بایک نام بگیری ولی با یک نام دیگر ذخیره کنی. (9 سال پیش)

پاسخگویی و مشاهده پاسخ های این سوال تنها برای اعضای ویژه سایت امکان پذیر است .
چنانچه تمایل دارید به همه بخش ها دسترسی داشته باشید میتوانید از این بخش لایسنس این آموزش را خریداری نمایید .