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

Annotation چیست؟ چه کاربردهایی دارد و چطور یک Annotation اختصاصی بنویسیم؟

Ali  9 سال پیش  9 سال پیش
0 0

سلام

تیتر سئوالم خیلی واضحه، میخواستم بدونم Annotation چیه و چه کاربردهایی داره و چطور میتونیم یه Annotation اختصاصی بنویسیم.

باتشکر

+1 0
توضیح و آموزش : لینک (9 سال پیش)
0 0
خیلی ممنون، این لینک رو قبلا دیده بودم ولی متاسفانه اونطور که باید درکش نکردم:( دلم میخواد با استفاده از Annotation، ویوها رو به کلاس بشناسونم یا به جای نوشتن متد onClickListener یا متدهای دیگه از Annotationها استفاده کنم؛ البته کتابخونه‌های بسیار جالبی وجود دارند که این کارها رو انجام میدند اما فکر کنم نوشتنش کار بسیار جالبتر و هیجان انگیزتری باشه:) راستی انجمن یه تاپیک هم در این مورد نداره، امیدوارم دوستان و اساتید بزرگوار یاری کنند تا این موضوع هم روشن بشه. (9 سال پیش)
0 0
کتابخونه‌هایی که گفتم لینک و لینک هستند که به نظر بیشتر به عنوان framework مطرح میشند. امیدوارم براتون مفید باشه :) (9 سال پیش)
0 0
این مورد ، شناسوندن ویوها رو اتفاقا استاد تدریس کردند (9 سال پیش)
+1 0
تدریس کردند اما باید یه کلاس دیگه توی کلاس اصلیمون بسازیم و ویوها رو اونجا تعریف کنیم اما با استفاده از Annotation کافی یه خط بنویسیم برای مثال: ;ViewById TextView txt@ البته فکر کنم برای انجام اینکار باید از همون کدها استفاده کنیم با این تفاوت که اینبار به جای استفاده از کلاس HelperUi از یه Annotation اختصاصی که تقریبا حاوی همون کدهاست استفاده میکنیم. اما اینها رو حدسی گفتم چون چیز زیادی از ساختن و استفاده کردن از Annotation اختصاصی نمیدونم :) (9 سال پیش)
 برای این سوال 1 پاسخ وجود دارد.
پاسخ به سوال 
Ali  9 سال پیش
+2 0

سلام
بالاخره تونستم اون کاری که استاد توی ویدئوی ' استفاده از Java Reflection' انجام میدادند رو به شکل دیگری انجام بدم البته اصلش یکیه :


کلاس ActivityMain :

 public class ActivityMain extends Activity {

@MyViewById
public TextView txt;

@MyViewById
public Button btn;

@MyViewById
public EditText edt;


@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.main);

new Helper(getWindow().getDecorView(), ActivityMain.this);

btn.setOnClickListener(new OnClickListener() {

@Override
public void onClick(View v) {
if ( !edt.getText().toString().matches("")) {
txt.setText(edt.getText().toString());
} else {
txt.setText("...");
}
}
});
}
}

main.xml :

 <?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="fill_parent"
android:layout_height="fill_parent"
android:background="#444"
android:gravity="center"
android:orientation="vertical"
android:padding="24dp" >

<EditText
android:id="@+id/edt"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:ems="10" >
<requestFocus />
</EditText>

<TextView
android:id="@+id/txt"
android:layout_width="fill_parent"
android:layout_height="wrap_content"
android:layout_margin="24dp"
android:gravity="center"
android:text="Hi!"
android:textColor="#FFF"
android:textSize="18dp" />

<Button
android:id="@+id/btn"
android:layout_width="120dp"
android:layout_height="wrap_content"
android:text="Click Me!" />

</LinearLayout>

کلاس G :

 public class G extends Application {

public static Resources resources;
public static String packageName;

@Override
public void onCreate() {
super.onCreate();
resources = getResources();
packageName = getPackageName();
}
}

انوتیشن MyViewById که توی یه کلاس جداگونه قرارش دادم :

@Target(ElementType.FIELD)
@Retention(RetentionPolicy.RUNTIME)
public @interface MyViewById {}

کلاس Helper :

 public class Helper {

public Helper(View decorView, Context context) {
try {
for (Field field: context.getClass()
.getClassLoader()
.loadClass(context.getClass().getName())
.getFields()) {
if (field.isAnnotationPresent(MyViewById.class)) {
try {
int id = G.resources.getIdentifier(field.getName(), "id", G.packageName);
field.set(context, field.getType().cast(decorView.findViewById(id)));
}
catch (Throwable e) {
e.printStackTrace();
}
}
}
}
catch (Exception e) {
e.printStackTrace();
}
}
}

امیدوارم براتون مفید باشه. (خودم که خیلی حال کردم :) )
خیلی ممنون میشم اگه دوستان و اساتید راهنمایی کنند تا این مبحث کاملتر و بهتر توضیح داده بشه.


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