coco 1,746 ارسال شده در 9 شهریور، ۱۳۹۵ اشتراک گذاری ارسال شده در 9 شهریور، ۱۳۹۵ سلام دوستان من اومدم داخل فرگمنتم یه ریسایکلر ویو گذاشتم و یه اینترفیس ساختم که کلیک شدنه آیتما رو از اکتیویتی کنترل کنم حالا مشکل داره کده اینترفیس : public interface ItemClickListener{ public abstract void onItemClick(int ID,String text); } اینم متودی که تعریف کردم و از توی کلیک لیسنر ها داخله Adapter عه ریسایکلر ویو اجراش میکنم : public void OnItemClick(int ID,String text){ FehrestList.itemClickListener.onItemClick(ID,text); } پیشاپیش ممنون از راهنمایی هاتون لینک ارسال به اشتراک گذاری در سایت های دیگر تنظیمات بیشتر اشتراک گذاری ...
محمدرضا شاهپیری 5,582 ارسال شده در 9 شهریور، ۱۳۹۵ اشتراک گذاری ارسال شده در 9 شهریور، ۱۳۹۵ ببینید دوست عزیز شما به این صورت نمیتونید واسه ریسایکر ویو کلیک لیستنر تعریف کنید دوتا راه دارید 1- یه کلاس درست کنید و از نوع RecyclerView.OnItemTouchListener اونو ایمپلمنت کنید و اونجا interface رو درست کنید نمونه زیر رو ببینید public class RecyclerItemClickListener implements RecyclerView.OnItemTouchListener { private OnItemClickListener mListener; public interface OnItemClickListener { public void onItemClick(View view, int position); } GestureDetector mGestureDetector; public RecyclerItemClickListener(Context context, OnItemClickListener listener) { mListener = listener; mGestureDetector = new GestureDetector(context, new GestureDetector.SimpleOnGestureListener() { @Override public boolean onSingleTapUp(MotionEvent e) { return true; } }); } @Override public boolean onInterceptTouchEvent(RecyclerView view, MotionEvent e) { View childView = view.findChildViewUnder(e.getX(), e.getY()); if (childView != null && mListener != null && mGestureDetector.onTouchEvent(e)) { mListener.onItemClick(childView, view.getChildAdapterPosition(childView)); } return false; } @Override public void onTouchEvent(RecyclerView view, MotionEvent motionEvent) { } @Override public void onRequestDisallowInterceptTouchEvent(boolean disallowIntercept) { } } حالا باید اونو به ریسایکلر بدین به شکل زیر recyclerView.addOnItemTouchListener(new RecyclerItemClickListener(this, new RecyclerItemClickListener.OnItemClickListener() { @Override public void onItemClick(View view, int position) { startActivity(new Intent(MainActivity.this, Sms.class).putExtra("Sgroup", position)); } }) ); راه دوم که خیلی هم ساده است اینه که از طریق خود آداپتر این کارو بکنید شما تو دوتا متد که میتونید به ویوهای آداپتر دستترسی پیدا کنید این کار رو انجام بدید یکی متد onbindviewholder و یکی هم کلاس viewholder @Override public void onBindViewHolder(final MyViewHolder holder, final int position) { holder.smsbtn.setOnClickListener(new View.OnClickListener() { @Override public void onClick(View v) { context.startActivity( new ShareApp(v.getContext()).sendsms(holder.smstxt.getText().toString())); } }); } public static class MyViewHolder extends RecyclerView.ViewHolder{ ImageButton smsbtn; ImageButton sharbtn; ImageButton favimg; TextView smstxt; TextView serchactnam; public MyViewHolder(final View itemView) { super(itemView); sharbtn=( ImageButton)itemView.findViewById(R.id.serchsharbtn); //onclic sharbtn.setOnClickListener(new View.OnClickListener() { @Override public void onClick(View v) { } }); } } لینک ارسال به اشتراک گذاری در سایت های دیگر تنظیمات بیشتر اشتراک گذاری ...
coco 1,746 ارسال شده در 9 شهریور، ۱۳۹۵ سازنده اشتراک گذاری ارسال شده در 9 شهریور، ۱۳۹۵ ببینید دوست عزیز شما به این صورت نمیتونید واسه ریسایکر ویو کلیک لیستنر تعریف کنید دوتا راه دارید 1- یه کلاس درست کنید و از نوع RecyclerView.OnItemTouchListener اونو ایمپلمنت کنید و اونجا interface رو درست کنید نمونه زیر رو ببینید public class RecyclerItemClickListener implements RecyclerView.OnItemTouchListener { private OnItemClickListener mListener; public interface OnItemClickListener { public void onItemClick(View view, int position); } GestureDetector mGestureDetector; public RecyclerItemClickListener(Context context, OnItemClickListener listener) { mListener = listener; mGestureDetector = new GestureDetector(context, new GestureDetector.SimpleOnGestureListener() { @Override public boolean onSingleTapUp(MotionEvent e) { return true; } }); } @Override public boolean onInterceptTouchEvent(RecyclerView view, MotionEvent e) { View childView = view.findChildViewUnder(e.getX(), e.getY()); if (childView != null && mListener != null && mGestureDetector.onTouchEvent(e)) { mListener.onItemClick(childView, view.getChildAdapterPosition(childView)); } return false; } @Override public void onTouchEvent(RecyclerView view, MotionEvent motionEvent) { } @Override public void onRequestDisallowInterceptTouchEvent(boolean disallowIntercept) { } } حالا باید اونو به ریسایکلر بدین به شکل زیر recyclerView.addOnItemTouchListener(new RecyclerItemClickListener(this, new RecyclerItemClickListener.OnItemClickListener() { @Override public void onItemClick(View view, int position) { startActivity(new Intent(MainActivity.this, Sms.class).putExtra("Sgroup", position)); } }) ); راه دوم که خیلی هم ساده است اینه که از طریق خود آداپتر این کارو بکنید شما تو دوتا متد که میتونید به ویوهای آداپتر دستترسی پیدا کنید این کار رو انجام بدید یکی متد onbindviewholder و یکی هم کلاس viewholder @Override public void onBindViewHolder(final MyViewHolder holder, final int position) { holder.smsbtn.setOnClickListener(new View.OnClickListener() { @Override public void onClick(View v) { context.startActivity( new ShareApp(v.getContext()).sendsms(holder.smstxt.getText().toString())); } }); } public static class MyViewHolder extends RecyclerView.ViewHolder{ ImageButton smsbtn; ImageButton sharbtn; ImageButton favimg; TextView smstxt; TextView serchactnam; public MyViewHolder(final View itemView) { super(itemView); sharbtn=( ImageButton)itemView.findViewById(R.id.serchsharbtn); //onclic sharbtn.setOnClickListener(new View.OnClickListener() { @Override public void onClick(View v) { } }); } } خب ببینین من هم اومدم از روش دوم انجام دادم اما میخوام کد های داخل onClick رو از توی اکتیویتی دیگه بدم لینک ارسال به اشتراک گذاری در سایت های دیگر تنظیمات بیشتر اشتراک گذاری ...
محمدرضا شاهپیری 5,582 ارسال شده در 9 شهریور، ۱۳۹۵ اشتراک گذاری ارسال شده در 9 شهریور، ۱۳۹۵ روش دوم فقط تو اداپتر اجرا میشه و همونجا باید مقادیر رو بدی اگه میخوای خارج از آداپتر کلیک بزنی از روش اول استفاده کن لینک ارسال به اشتراک گذاری در سایت های دیگر تنظیمات بیشتر اشتراک گذاری ...
امین شاهدی 5,773 ارسال شده در 9 شهریور، ۱۳۹۵ اشتراک گذاری ارسال شده در 9 شهریور، ۱۳۹۵ کد های Interface درسته فقط طرز دادنش به اکتیویتی فرق داره ، به این صورت بده (تست نکردم اگه جاییش مورد داشت تغییر بده) public class MainActivity extends AppCompatActivity implements MyClickListener{ RecyclerView recyclerView; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); recyclerView = (RecyclerView) findViewById(R.id.recycler); recyclerView.setAdapter(new CheckedDays(this)); } @Override public void onItemClick(int ID, String text) { //Code hat } } کد های ادپتر public class CheckedDays extends RecyclerView.Adapter { Activity listener; CheckedDays(Activity activity){ listener = activity; } @Override public RecyclerView.ViewHolder onCreateViewHolder(ViewGroup parent, int viewType) { return null; } @Override public void onBindViewHolder(RecyclerView.ViewHolder holder, int position) { holder.itemView.setOnClickListener(new View.OnClickListener() { @Override public void onClick(View v) { ((MyClickListener)listener).onItemClick(ID,"felan"); } }); } @Override public int getItemCount() { return 0; } } لینک ارسال به اشتراک گذاری در سایت های دیگر تنظیمات بیشتر اشتراک گذاری ...
سوال
coco 1,746
سلام دوستان
من اومدم داخل فرگمنتم یه ریسایکلر ویو گذاشتم و یه اینترفیس ساختم که کلیک شدنه آیتما رو از اکتیویتی کنترل کنم
حالا مشکل داره
کده اینترفیس :
اینم متودی که تعریف کردم و از توی کلیک لیسنر ها داخله Adapter عه ریسایکلر ویو اجراش میکنم :
پیشاپیش ممنون از راهنمایی هاتون
لینک ارسال
به اشتراک گذاری در سایت های دیگر
4 پاسخ به این سوال تاکنون داده شده است
ارسالهای توصیه شده
بایگانی شده
این موضوع بایگانی و قفل شده و دیگر امکان ارسال پاسخ نیست.