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

استفاده از butterknife به جای درگیر شدن با findViewById (آموزشی)

hossein_hr10  7 سال پیش  7 سال پیش
+4 0

سلام وقت همگی بخیر من اتفاقی با butterknife آشنا شدم که خیلی کارها میکنه ، که کد نویسی رو راحت تر میکنه یکی از مواردی که میشه بهش اشاره کرد اینه که شمارو از درگیر کردن با findViewById راحت میکنه ( از قابلیتای دیگش set کردن onClick برای view ها یا set کردن property های مختلف به راحتی یا حتی در adapter هایی که برای listView یا RecyclerView هاتون مینویسین کافیه با دادن دوتا پارامتر بهش کلا دیگه از نوشتن findViewById راحت بشین و ... هست )

خب اول  dependencies زیر رو به پروژتون اضافه کنید 

compile 'com.jakewharton:butterknife:6.1.0'

خب حالا من به عنوان مثال یکی از قابلیتاش رو اینجا میگم که چه جوری هست و  باید نوشته بشه

فرض کنید یه چند تا TextView و Button در لایه xml تون دارین  خب یه راهش که همه میدونیم مثل زیر

TextView txtTitle = (TextView) findViewById(R.id.txtTitle); 
TextView txtDesc = (TextView) findViewById(R.id.txtDesc); 
TextView txtDate = (TextView) findViewById(R.id.txtDate); 
TextView btnOk = (TextView) findViewById(R.id.btnOk); 
TextView btnExit = (TextView) findViewById(R.id.btnExit); 

 اما با استفاده از این لایبرری میتونین به این صورت تعریف کنین

@InjectView(R.id.txtTitle)
TextView txtTitle;
@InjectView(R.id.txtDesc)
TextView txtDesc;
@InjectView(R.id.txtDate)
TextView txtDate;
@InjectView(R.id.btnOk)
Button btnOk;
@InjectView(R.id.btnExit)
Button btnExit;

فقط باید این یه خط کد رو هم به onCreate اکتیویتیتون  اضافه کنین

  

 ButterKnife.inject(this);

یا مثال دیگه فرض کنید در ViewHolder داخل RecyclerView تون یا در ViewHolder داخل listView تون کافیه به شکل زیر عمل کنین

 
public class MyViewHolder extends RecyclerView.ViewHolder
{
@InjectView(R.id.view_news_image)
ImageView view_news_image;
@InjectView(R.id.view_news_tv_title)
TextView view_news_tv_title;
@InjectView(R.id.view_news_tv_description)
TextView view_news_tv_description;
@InjectView(R.id.view_news_tv_author)
TextView view_news_tv_author;
@InjectView(R.id.view_news_tv_date)
TextView view_news_tv_date;
@InjectView(R.id.view_news_cardview)
CardView view_news_cardview;

public MyViewHolder(View view) {
super(view);
ButterKnife.inject(this , view);
}

}

همونطور که میبینین دیگه در بالا از findViewById خبری نیست

و من پیشنهاد میکنم حتما به این لینک زیر یه سر بزنید خودتون میفهمید چه قابلیت هایی داره امیدوارم مفید باشه براتون :)

 

http://jakewharton.github.io/butterknife/

+1 0
ممنون از اینکه اموخته هاتون رو در اختیار بقیع میگزارین . (7 سال پیش)
0 0
خواهش میکنم دوست عزیز امیدوارم مفید باشه :) (7 سال پیش)
0 0
خواهش میکنم دوست عزیز امیدوارم مفید باشه (7 سال پیش)
+1 0
دوست عزیز ممنون برای اموزش . ولی یه روش دیگه برای اینجور نوشتن هست . dataBinding هست که در لی اوت ها به جای استفاده از linearLayout, RelativeLayou مییاین و لی اوت رو با تگ (7 سال پیش)
+1 0
چرا نصفه فرستاده شد ؟ اشکالی نداره : میاین و با تگ (7 سال پیش)
+1 0
لینک در این لینک کاملا گفته شده .. چون نظرم نصفه میاد :) بارم منون بابت اموزش دوست من (7 سال پیش)
 برای این سوال پاسخی وجود ندارد.

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