اجرای صحیح روش های onCreateOptionsMenu و onOptionsItemSelected هنگام استفاده از ActionBarSherlock ، برای نمایش و تعیین عملکرد action bar ، در برنامه نویسی اندروید
همان طور که می دانید، ActionBarSherlock برای ساخت action bar و Tab بندی های سازگار با نسخه های API پایین تر از 11 از اندروید به کار می رود (برخی دیگر، تنها برای نسخه های بالاتر از 11 درست عمل می کنند). اما یکی از مواردی که باید به آن توجه داشت این است که هنگام استفاده از ActionBarSherlock ، کدنویسی برای روش های onCreateOptionsMenu و onOptionsItemSelected کمی متفاوت خواهد بود، بنابراین در این مبحث، به این موضوع می پردازیم (همان طور که می دانید این دو روش برای ساخت action bar و تعریف نحوه عملکرد آن می باشند).
فرض کنید با ActionBarSherlock ، یک Activity شامل سه Fragment ساخته ایم (یعنی یک Tab بندی شامل سه Tab). اکنون می خواهیم که برای آن Tab ها ، یک action bar مشترک طراحی کنیم که چند item داشته باشد و با اشاره بر روی هر item ، کاربر به یک Activity جدید منتقل شود. برای این منظور، در Activity مورد نظر (دقت کنید که در کدهای Activity ، نه در کدهای Fragment ها)، روش های onCreateOptionsMenu و onOptionsItemSelected را به صورت زیر می نویسیم :
public boolean onCreateOptionsMenu(Menu menu) {
getSupportMenuInflater().inflate(R.menu.menu, menu);
return true;
}
@Override
public boolean onOptionsItemSelected(com.actionbarsherlock.view.MenuItem item) {
// TODO Auto-generated method stub
switch (item.getItemId()) {
case R.id.itemActivity2:
//do something when this button is pressed
startActivity(new Intent(Activity1.this, Activity2.class));
return true;
case R.id.itemActivity3:
//do something when this button is pressed
startActivity(new Intent(Activity1.this, Activity3.class));
return true;
default:
return true;
}
}
در کدهای بالا، فرض کرده ایم که در پوشه menu از پروژه اندروید، فایلی با نام menu.xml داریم (که با R.menu.menu به آن ارجاع داده ایم).
خوب اکنون باید به نکات مهم برای عملکرد صحیح کدها اشاره کنیم :
همان طور که می دانید، ما معمولا با فشار دادن همزمان کلیدهای Ctrl و Shift و O (بخوانید او ، نه صفر)، تمامی package های لازم را وارد (import) می کنیم، اما گاهی این مورد، درست عمل نمی کند. یکی از package هایی که اتفاقا برای اجرای کدهای بالا لازم است، اما به درستی وارد (import) نمی شود را در زیر می نویسیم :
بنابراین کد بالا را به صورت دستی در کدها کپی کنید (در بخش وارد کردن package ها) و اگر package دیگری با آن تداخل (conflict) دارد، آن package دیگر را حذف کنید.
نکته دیگر که بد نیست به آن توجه کنید این است که ما قبلا (در مباحث دیگر)، ابتدای روش onOptionsItemSelected را به صورت زیر می نوشتیم :
اما برای ActionBarSherlock ، آن را به صورت زیر نوشته ایم (به این تفاوت دقت کنید) :
همچنین توجه داشته باشید که در کدهایی که نوشته ایم، برای روش onOptionsItemSelected ، تعدادی item دلخواه را در نظر گرفته ایم که تنها برای درک چگونگی تعیین عملکرد action bar ، هنگام اشاره بر روی item های action bar می باشد و شما باید آنها را مطابق موارد مورد نظر خود، تغییر بدهید.