Fragment ها در برنامه نویسی اندروید

P O U R I A

مدیر مهندسی شیمی مدیر تالار گفتگوی آزاد
مدیر تالار
فهرست مطالب:

  1. ساخت یک Activity به صورت Tab بندی (شامل چند Fragment)، با استفاده از کتابخانه ActionBarSherlock (مناسب برای API های پایین)، در برنامه نویسی اندروید
  2. تعریف یک TextView (و نمایش یک متن در آن TextView)، در یک Fragment ، در برنامه نویسی اندروید
  3. تعریف یک Button (و کدهای لازم برای اجرا، هنگام اشاره کاربر به Button)، در یک Fragment ، در برنامه نویسی اندروید
  4. رفتن از یک Fragment به یک Activity ، با Intent ، در برنامه نویسی اندروید
  5. به دست آوردن Context در یک Fragment ، در برنامه نویسی اندروید
  6. برطرف کردن مشکل عدم نمایش محتوای Tab ها، بعد از چندین بار انتخاب Tab های مختلف، با استفاده از روش setOffscreenPageLimit ، در برنامه نویسی اندروید
  7. اجرای صحیح روش های onCreateOptionsMenu و onOptionsItemSelected هنگام استفاده از ActionBarSherlock ، برای نمایش و تعیین عملکرد action bar ، در برنامه نویسی اندروید
  8. چگونگی استفاده از Proguard برای پروژه اندرویدی که در آن از کتابخانه ActionBarSherlock استفاده شده است (برای جلوگیری از بروز Force Close)، در برنامه نویسی اندروید


منبع: kelidestan
 

P O U R I A

مدیر مهندسی شیمی مدیر تالار گفتگوی آزاد
مدیر تالار
ساخت یک Activity به صورت Tab بندی (شامل چند Fragment)، با استفاده از کتابخانه ActionBarSherlock (مناسب برای API های پایین)

ساخت یک Activity به صورت Tab بندی (شامل چند Fragment)، با استفاده از کتابخانه ActionBarSherlock (مناسب برای API های پایین)

در این مبحث، پروزه اندرویدی را قرار می دهیم که چگونگی ساخت یک Activity به صورت Tab بندی (شامل چند Fragment)، با استفاده از کتابخانه ActionBarSherlock را شرح می دهد. این پروژه اندروید، از سایت دیگری می باشد که لینک منبع در انتهای مبحث ذکر شده است.

همان طور که در مباحث دیگر نیز تذکر دادیم، کتابخانه ActionBarSherlock امکان ساخت ویژگی های منحصربفرد برای برنامه اندروید، به گونه ای که در API های پایین نیز کار کند را فراهم می کند. بنابراین این پروژه اندروید در API های پایین نیز به خوبی کار می کند (توصیه می شود همیشه پروژه اندروید را برای API های پایین مد نظرتان تست کنید).

ساختار Tab بندی برنامه اندروید (شامل سه Tab) :

1471.jpg

1472.jpg

دقت شود که در فایل های پروژه اندروید، دو پروژه داریم که یکی به صورت کتابخانه (Library) است. پروژه ای که دارای نام ABS است، همان کتابخانه ActionBarSherlock می باشد. برای به کار بردن کتابخانه برای پروژه اندروید، توصیه می شود تاپیک "مباحث عمومی در برنامه نویسی اندروید" را بخوانید.
 

پیوست ها

  • 258.rar
    2.8 مگایابت · بازدیدها: 0
  • 259.rar
    479.1 کیلوبایت · بازدیدها: 0

P O U R I A

مدیر مهندسی شیمی مدیر تالار گفتگوی آزاد
مدیر تالار
تعریف یک TextView (و نمایش یک متن در آن TextView)، در یک Fragment ، در برنامه نویسی اندروید

تعریف یک TextView (و نمایش یک متن در آن TextView)، در یک Fragment ، در برنامه نویسی اندروید

در اینجا قصد داریم که شیوه تعریف یک TextView در یک Fragment را شرح بدهیم. همچنین یک متن را نیز در TextView نمایش خواهیم داد.

فرض کنید که نام فایل xml مربوط به Fragment مورد نظر ما برابر android_frag.xml باشد، کدهای فایل android_frag.xml را به صورت زیر می نویسیم :
کد:
[COLOR=#000000][FONT=Tahoma][FONT=monospace][COLOR=#339933]<?[/COLOR]xml version[COLOR=#339933]=[/COLOR][COLOR=#0000FF]"1.0"[/COLOR] encoding[COLOR=#339933]=[/COLOR][COLOR=#0000FF]"utf-8"[/COLOR][COLOR=#339933]?>[/COLOR]
[COLOR=#339933]<[/COLOR]LinearLayout xmlns[COLOR=#339933]:[/COLOR]android[COLOR=#339933]=[/COLOR][COLOR=#0000FF]"http://schemas.android.com/apk/res/android"[/COLOR]
    android[COLOR=#339933]:[/COLOR]layout_width[COLOR=#339933]=[/COLOR][COLOR=#0000FF]"match_parent"[/COLOR]
    android[COLOR=#339933]:[/COLOR]layout_height[COLOR=#339933]=[/COLOR][COLOR=#0000FF]"match_parent"[/COLOR]
    android[COLOR=#339933]:[/COLOR]gravity[COLOR=#339933]=[/COLOR][COLOR=#0000FF]"center"[/COLOR]
    android[COLOR=#339933]:[/COLOR]orientation[COLOR=#339933]=[/COLOR][COLOR=#0000FF]"vertical"[/COLOR] [COLOR=#339933]>[/COLOR]

    [COLOR=#339933]<[/COLOR]TextView
        android[COLOR=#339933]:[/COLOR]id[COLOR=#339933]=[/COLOR][COLOR=#0000FF]"@+id/textView"[/COLOR]
        android[COLOR=#339933]:[/COLOR]layout_width[COLOR=#339933]=[/COLOR][COLOR=#0000FF]"wrap_content"[/COLOR]
        android[COLOR=#339933]:[/COLOR]layout_height[COLOR=#339933]=[/COLOR][COLOR=#0000FF]"wrap_content"[/COLOR]
        android[COLOR=#339933]:[/COLOR]textSize[COLOR=#339933]=[/COLOR][COLOR=#0000FF]"50sp"[/COLOR][COLOR=#339933]/>[/COLOR]

[COLOR=#339933]</[/COLOR]LinearLayout[COLOR=#339933]>[/COLOR][/FONT]
[/FONT][/COLOR]
که در آن، یک TextView با id برابر textView تعریف شده است.

نام فایل java مربوط به fragment را برابر Android.java در نظر گرفته و کدهای آن را به صورت زیر می نویسیم :
کد:
[COLOR=#000000][FONT=Tahoma][FONT=monospace][B]package[/B] [COLOR=#006699]com.kelidestan.fragments[/COLOR][COLOR=#339933];[/COLOR]

[B]import[/B] [COLOR=#006699]android.os.Bundle[/COLOR][COLOR=#339933];[/COLOR]
[B]import[/B] [COLOR=#006699]android.support.v4.app.Fragment[/COLOR][COLOR=#339933];[/COLOR]
[B]import[/B] [COLOR=#006699]android.view.LayoutInflater[/COLOR][COLOR=#339933];[/COLOR]
[B]import[/B] [COLOR=#006699]android.view.View[/COLOR][COLOR=#339933];[/COLOR]
[B]import[/B] [COLOR=#006699]android.view.ViewGroup[/COLOR][COLOR=#339933];[/COLOR]
[B]import[/B] [COLOR=#006699]android.widget.TextView[/COLOR][COLOR=#339933];[/COLOR]

[B]public[/B] [B]class[/B] Android [B]extends[/B] Fragment [COLOR=#009900]{[/COLOR]
    @Override
    [B]public[/B] [COLOR=#003399]View[/COLOR] onCreateView[COLOR=#009900]([/COLOR]LayoutInflater inflater, ViewGroup container,
            Bundle savedInstanceState[COLOR=#009900])[/COLOR] [COLOR=#009900]{[/COLOR]
         
        [COLOR=#003399]View[/COLOR] android [COLOR=#339933]=[/COLOR] inflater.[COLOR=#006633]inflate[/COLOR][COLOR=#009900]([/COLOR]R.[COLOR=#006633]layout[/COLOR].[COLOR=#006633]android_frag[/COLOR], container, [COLOR=#000066][B]false[/B][/COLOR][COLOR=#009900])[/COLOR][COLOR=#339933];[/COLOR]
        TextView tv [COLOR=#339933]=[/COLOR] [COLOR=#009900]([/COLOR]TextView[COLOR=#009900])[/COLOR] android.[COLOR=#006633]findViewById[/COLOR][COLOR=#009900]([/COLOR]R.[COLOR=#006633]id[/COLOR].[COLOR=#006633]textView[/COLOR][COLOR=#009900])[/COLOR][COLOR=#339933];[/COLOR]
        tv.[COLOR=#006633]setText[/COLOR][COLOR=#009900]([/COLOR][COLOR=#0000FF]"Android"[/COLOR][COLOR=#009900])[/COLOR][COLOR=#339933];[/COLOR]
        [B]return[/B] android[COLOR=#339933];[/COLOR]
    [COLOR=#009900]}[/COLOR]
[COLOR=#009900]}[/COLOR][/FONT]
[/FONT][/COLOR]
با کدها، تعیین کرده ایم که عبارت Android در TextView نمایش داده شود.

توجه داشته باشید که نام package که در خط اول کدها نوشته شده را باید برای پروژه اندروید خود تغییر بدهید.
 

P O U R I A

مدیر مهندسی شیمی مدیر تالار گفتگوی آزاد
مدیر تالار
تعریف یک Button (و کدهای لازم برای اجرا، هنگام اشاره کاربر به Button)، در یک Fragment ، در برنامه نویسی اندروید

تعریف یک Button (و کدهای لازم برای اجرا، هنگام اشاره کاربر به Button)، در یک Fragment ، در برنامه نویسی اندروید

تعریف یک Button برای یک Fragment ، ساده می باشد و همانند تعریف TextView در Fragment ، زیاد کدنویسی ندارد، اما برای آنکه یک سری کد تعیین کنیم که بعد از اشاره بر روی Button ، اجرا شوند، باید تغییراتی را در ساختار کدنویسی Fragment بدهیم.

فرض کنید که نام فایل xml مربوط به Fragment مورد نظر ما برابر android_frag.xml باشد، کدهای فایل android_frag.xml را به صورت زیر می نویسیم :
کد:
[COLOR=#000000][FONT=Tahoma][FONT=monospace][COLOR=#339933]<?[/COLOR]xml version[COLOR=#339933]=[/COLOR][COLOR=#0000FF]"1.0"[/COLOR] encoding[COLOR=#339933]=[/COLOR][COLOR=#0000FF]"utf-8"[/COLOR][COLOR=#339933]?>[/COLOR]
[COLOR=#339933]<[/COLOR]LinearLayout xmlns[COLOR=#339933]:[/COLOR]android[COLOR=#339933]=[/COLOR][COLOR=#0000FF]"http://schemas.android.com/apk/res/android"[/COLOR]
    android[COLOR=#339933]:[/COLOR]layout_width[COLOR=#339933]=[/COLOR][COLOR=#0000FF]"match_parent"[/COLOR]
    android[COLOR=#339933]:[/COLOR]layout_height[COLOR=#339933]=[/COLOR][COLOR=#0000FF]"match_parent"[/COLOR]
    android[COLOR=#339933]:[/COLOR]gravity[COLOR=#339933]=[/COLOR][COLOR=#0000FF]"center"[/COLOR]
    android[COLOR=#339933]:[/COLOR]orientation[COLOR=#339933]=[/COLOR][COLOR=#0000FF]"vertical"[/COLOR] [COLOR=#339933]>[/COLOR]

    [COLOR=#339933]<[/COLOR][COLOR=#003399]Button[/COLOR]
        android[COLOR=#339933]:[/COLOR]id[COLOR=#339933]=[/COLOR][COLOR=#0000FF]"@+id/button1"[/COLOR]
        android[COLOR=#339933]:[/COLOR]layout_width[COLOR=#339933]=[/COLOR][COLOR=#0000FF]"wrap_content"[/COLOR]
        android[COLOR=#339933]:[/COLOR]layout_height[COLOR=#339933]=[/COLOR][COLOR=#0000FF]"wrap_content"[/COLOR]
        android[COLOR=#339933]:[/COLOR]text[COLOR=#339933]=[/COLOR][COLOR=#0000FF]"Button"[/COLOR] [COLOR=#339933]/>[/COLOR]

[COLOR=#339933]</[/COLOR]LinearLayout[COLOR=#339933]>[/COLOR][/FONT]
[/FONT][/COLOR]
که در آن، یک Button با id برابر button1 تعریف شده است.

نام فایل java مربوط به fragment را برابر Android.java در نظر گرفته و کدهای آن را به صورت زیر می نویسیم :
کد:
[COLOR=#000000][FONT=Tahoma][FONT=monospace][B]package[/B] [COLOR=#006699]com.kelidestan.fragments[/COLOR][COLOR=#339933];[/COLOR]

[B]import[/B] [COLOR=#006699]android.content.DialogInterface.OnClickListener[/COLOR][COLOR=#339933];[/COLOR]
[B]import[/B] [COLOR=#006699]android.os.Bundle[/COLOR][COLOR=#339933];[/COLOR]
[B]import[/B] [COLOR=#006699]android.support.v4.app.Fragment[/COLOR][COLOR=#339933];[/COLOR]
[B]import[/B] [COLOR=#006699]android.view.LayoutInflater[/COLOR][COLOR=#339933];[/COLOR]
[B]import[/B] [COLOR=#006699]android.view.View[/COLOR][COLOR=#339933];[/COLOR]
[B]import[/B] [COLOR=#006699]android.view.ViewGroup[/COLOR][COLOR=#339933];[/COLOR]
[B]import[/B] [COLOR=#006699]android.widget.Button[/COLOR][COLOR=#339933];[/COLOR]

[B]public[/B] [B]class[/B] Android [B]extends[/B] Fragment [B]implements[/B] [COLOR=#003399]View[/COLOR].[COLOR=#006633]OnClickListener[/COLOR][COLOR=#009900]{[/COLOR]
         @Override
         [B]public[/B] [COLOR=#003399]View[/COLOR] onCreateView[COLOR=#009900]([/COLOR]LayoutInflater inflater, ViewGroup container,
                    Bundle savedInstanceState[COLOR=#009900])[/COLOR] [COLOR=#009900]{[/COLOR]
         
             [COLOR=#003399]View[/COLOR] android [COLOR=#339933]=[/COLOR] inflater.[COLOR=#006633]inflate[/COLOR][COLOR=#009900]([/COLOR]R.[COLOR=#006633]layout[/COLOR].[COLOR=#006633]android_frag[/COLOR], container, [COLOR=#000066][B]false[/B][/COLOR][COLOR=#009900])[/COLOR][COLOR=#339933];[/COLOR]
             [COLOR=#003399]Button[/COLOR] b [COLOR=#339933]=[/COLOR] [COLOR=#009900]([/COLOR][COLOR=#003399]Button[/COLOR][COLOR=#009900])[/COLOR] android.[COLOR=#006633]findViewById[/COLOR][COLOR=#009900]([/COLOR]R.[COLOR=#006633]id[/COLOR].[COLOR=#006633]button1[/COLOR][COLOR=#009900])[/COLOR][COLOR=#339933];[/COLOR]
             b.[COLOR=#006633]setOnClickListener[/COLOR][COLOR=#009900]([/COLOR][B]this[/B][COLOR=#009900])[/COLOR][COLOR=#339933];[/COLOR]
             [B]return[/B] android[COLOR=#339933];[/COLOR]
         [COLOR=#009900]}[/COLOR]
         
         @Override
         [B]public[/B] [COLOR=#000066][B]void[/B][/COLOR] onClick[COLOR=#009900]([/COLOR][COLOR=#003399]View[/COLOR] v[COLOR=#009900])[/COLOR] [COLOR=#009900]{[/COLOR]
             [B]switch[/B] [COLOR=#009900]([/COLOR]v.[COLOR=#006633]getId[/COLOR][COLOR=#009900]([/COLOR][COLOR=#009900])[/COLOR][COLOR=#009900])[/COLOR] [COLOR=#009900]{[/COLOR]
             [B]case[/B] R.[COLOR=#006633]id[/COLOR].[COLOR=#006633]button1[/COLOR][COLOR=#339933]:[/COLOR]
             [COLOR=#666666][I]// code for after click on button[/I][/COLOR]
                 [B]break[/B][COLOR=#339933];[/COLOR]
             [COLOR=#009900]}[/COLOR]
         [COLOR=#009900]}[/COLOR]
[COLOR=#009900]}[/COLOR][/FONT]
[/FONT][/COLOR]
دقت کنید که به جای عبارت زیر :
کد:
[COLOR=#000000][FONT=Tahoma][FONT=monospace]// code for after click on button[/FONT]
[/FONT][/COLOR]
باید کدهای مورد نظرمان برای اجرا بعد از اشاره بر روی Button را بنویسیم.

توجه داشته باشید که نام package که در خط اول کدها نوشته شده را باید برای پروژه اندروید خود تغییر بدهید.

همچنین اگر به کدها دقت کنید، متوجه می شوید که عبارت زیر، به انتهای خط اول تعریف Fragmnet افزوده شده است :
کد:
[COLOR=#000000][FONT=Tahoma][FONT=monospace][B]implements[/B] [COLOR=#003399]View[/COLOR].[COLOR=#006633]OnClickListener[/COLOR][/FONT]
[/FONT][/COLOR]
که اهمیت زیادی دارد و نباید فراموش شود.
 

P O U R I A

مدیر مهندسی شیمی مدیر تالار گفتگوی آزاد
مدیر تالار
رفتن از یک Fragment به یک Activity ، با Intent ، در برنامه نویسی اندروید

رفتن از یک Fragment به یک Activity ، با Intent ، در برنامه نویسی اندروید

فرض کنید که می خواهیم از یک Fragment به یک Activity برویم، برای این منظور، درون کدهای Fragment ، کد زیر را می نویسیم :
کد:
[COLOR=#000000][FONT=Tahoma][FONT=monospace]Intent intent [COLOR=#339933]=[/COLOR] [B]new[/B] Intent[COLOR=#009900]([/COLOR]getActivity[COLOR=#009900]([/COLOR][COLOR=#009900])[/COLOR], NextActivity.[B]class[/B][COLOR=#009900])[/COLOR][COLOR=#339933];[/COLOR]
startActivity[COLOR=#009900]([/COLOR]intent[COLOR=#009900])[/COLOR][COLOR=#339933];[/COLOR][/FONT]
[/FONT][/COLOR]
که در آن، NextActivity ، نام همان Activity است که می خواهیم به آن برویم.
 

P O U R I A

مدیر مهندسی شیمی مدیر تالار گفتگوی آزاد
مدیر تالار
به دست آوردن Context در یک Fragment ، در برنامه نویسی اندروید

به دست آوردن Context در یک Fragment ، در برنامه نویسی اندروید

هنگامی که درون یک Fragment کد می نویسیم، ممکن است که بخواهیم Context را به دست آوریم (یعنی به دست آوردن Context مربوط به Activity شامل آن Fragment). برای این منظور، درون Fragment ، تابع زیر را می نویسیم که Context را به ما می دهد :
کد:
[COLOR=#000000][FONT=Tahoma][FONT=monospace]getActivity[COLOR=#009900]([/COLOR][COLOR=#009900])[/COLOR][/FONT]
[/FONT][/COLOR]
 

P O U R I A

مدیر مهندسی شیمی مدیر تالار گفتگوی آزاد
مدیر تالار
برطرف کردن مشکل عدم نمایش محتوای Tab ها، بعد از چندین بار انتخاب Tab های مختلف، با استفاده از روش setOffscreenPageLimit

برطرف کردن مشکل عدم نمایش محتوای Tab ها، بعد از چندین بار انتخاب Tab های مختلف، با استفاده از روش setOffscreenPageLimit

همان طور که می دانید، با استفاده از Fragment ها ، می توانیم یک برنامه اندروید به صورت Tab بندی شده داشته باشیم :

android-318.jpg

اما یکی از مشکلاتی که هنگام کار با Tab ها با آن مواجه هستیم این است که بعد از چند بار انتخاب Tab های مختلف، ممکن است که دیگر محتوای یک یا چند Tab نمایش داده نشود و عملا آن را به صورت خالی ببینیم. برای رفع این مشکل، می توانیم از روش setOffscreenPageLimit استفاده کنیم.

فرض کنید که در Activity مربوط به Fragment ها، یک ViewPager با نام vp تعریف کرده ایم، حال برای رفع مشکل مورد نظر، باید کد زیر را بنویسیم :
کد:
[COLOR=#000000][FONT=Tahoma][FONT=monospace]vp.[COLOR=#006633]setOffscreenPageLimit[/COLOR][COLOR=#009900]([/COLOR][COLOR=#CC66CC]3[/COLOR][COLOR=#009900])[/COLOR][COLOR=#339933];[/COLOR][/FONT]
[/FONT][/COLOR]
که در آن فرض کرده ایم که تعداد Tab ها برابر 3 است، اگر تعداد Tab های برنامه اندروید شما فرق دارد، باید به جای عدد 3 ، همان تعداد را بنویسید.

[h=4]نکته :[/h]بد نیست تذکر بدهیم که معمولا برای ساخت برنامه های اندروید به صورت Tab بندی، از ActionBarSherlock استفاده می شود، زیرا این action bar این امکان را فراهم می کند که در نسخه های API پایین تر از 11 نیز اجرا شود (برخی Tab بندی ها، در نسخه های API پایین تر از 11 عمل نمی کنند).

این مبحث، با الهام از منابع زیر نوشته شده است :

stackoverflow.com/questions/20628409/android-sherlock-content-gone-after-3-swipe

stackoverflow.com/questions/12538861/what-is-the-practical-effect-of-viewpager-setoffscreenpagelimit3/12538927#12538927
 

P O U R I A

مدیر مهندسی شیمی مدیر تالار گفتگوی آزاد
مدیر تالار
اجرای صحیح روش های onCreateOptionsMenu و onOptionsItemSelected هنگام استفاده از ActionBarSherlockهمان طور که می دانید، ActionBarSh

اجرای صحیح روش های onCreateOptionsMenu و onOptionsItemSelected هنگام استفاده از ActionBarSherlockهمان طور که می دانید، ActionBarSh

اجرای صحیح روش های 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 را به صورت زیر می نویسیم :
کد:
[COLOR=#000000][FONT=Tahoma][FONT=monospace]@Override
[B]public[/B] [COLOR=#000066][B]boolean[/B][/COLOR] onCreateOptionsMenu[COLOR=#009900]([/COLOR][COLOR=#003399]Menu[/COLOR] menu[COLOR=#009900])[/COLOR] [COLOR=#009900]{[/COLOR]
    getSupportMenuInflater[COLOR=#009900]([/COLOR][COLOR=#009900])[/COLOR].[COLOR=#006633]inflate[/COLOR][COLOR=#009900]([/COLOR]R.[COLOR=#006633]menu[/COLOR].[COLOR=#006633]menu[/COLOR], menu[COLOR=#009900])[/COLOR][COLOR=#339933];[/COLOR]
    [B]return[/B] [COLOR=#000066][B]true[/B][/COLOR][COLOR=#339933];[/COLOR]
[COLOR=#009900]}[/COLOR]

@Override
[B]public[/B] [COLOR=#000066][B]boolean[/B][/COLOR] onOptionsItemSelected[COLOR=#009900]([/COLOR]com.[COLOR=#006633]actionbarsherlock[/COLOR].[COLOR=#006633]view[/COLOR].[COLOR=#003399]MenuItem[/COLOR] item[COLOR=#009900])[/COLOR] [COLOR=#009900]{[/COLOR]
    [COLOR=#666666][I]// TODO Auto-generated method stub[/I][/COLOR]
    [B]switch[/B] [COLOR=#009900]([/COLOR]item.[COLOR=#006633]getItemId[/COLOR][COLOR=#009900]([/COLOR][COLOR=#009900])[/COLOR][COLOR=#009900])[/COLOR] [COLOR=#009900]{[/COLOR]
    [B]case[/B] R.[COLOR=#006633]id[/COLOR].[COLOR=#006633]itemActivity2[/COLOR][COLOR=#339933]:[/COLOR]
        [COLOR=#666666][I]//do something when this button is pressed[/I][/COLOR]
        startActivity[COLOR=#009900]([/COLOR][B]new[/B] Intent[COLOR=#009900]([/COLOR]Activity1.[B]this[/B], Activity2.[B]class[/B][COLOR=#009900])[/COLOR][COLOR=#009900])[/COLOR][COLOR=#339933];[/COLOR]
        [B]return[/B] [COLOR=#000066][B]true[/B][/COLOR][COLOR=#339933];[/COLOR]
    [B]case[/B] R.[COLOR=#006633]id[/COLOR].[COLOR=#006633]itemActivity3[/COLOR][COLOR=#339933]:[/COLOR]
        [COLOR=#666666][I]//do something when this button is pressed[/I][/COLOR]
        startActivity[COLOR=#009900]([/COLOR][B]new[/B] Intent[COLOR=#009900]([/COLOR]Activity1.[B]this[/B], Activity3.[B]class[/B][COLOR=#009900])[/COLOR][COLOR=#009900])[/COLOR][COLOR=#339933];[/COLOR]
        [B]return[/B] [COLOR=#000066][B]true[/B][/COLOR][COLOR=#339933];[/COLOR]
    [B]default[/B][COLOR=#339933]:[/COLOR] 
        [B]return[/B] [COLOR=#000066][B]true[/B][/COLOR][COLOR=#339933];[/COLOR]
    [COLOR=#009900]}[/COLOR]   
[COLOR=#009900]}[/COLOR][/FONT]
[/FONT][/COLOR]
در کدهای بالا، فرض کرده ایم که در پوشه menu از پروژه اندروید، فایلی با نام menu.xml داریم (که با R.menu.menu به آن ارجاع داده ایم).

خوب اکنون باید به نکات مهم برای عملکرد صحیح کدها اشاره کنیم :

همان طور که می دانید، ما معمولا با فشار دادن همزمان کلیدهای Ctrl و Shift و O (بخوانید او ، نه صفر)، تمامی package های لازم را وارد (import) می کنیم، اما گاهی این مورد، درست عمل نمی کند. یکی از package هایی که اتفاقا برای اجرای کدهای بالا لازم است، اما به درستی وارد (import) نمی شود را در زیر می نویسیم :
کد:
[COLOR=#000000][FONT=Tahoma][FONT=monospace][B]import[/B] [COLOR=#006699]com.actionbarsherlock.view.Menu[/COLOR][COLOR=#339933];[/COLOR][/FONT]
[/FONT][/COLOR]
بنابراین کد بالا را به صورت دستی در کدها کپی کنید (در بخش وارد کردن package ها) و اگر package دیگری با آن تداخل (conflict) دارد، آن package دیگر را حذف کنید.

نکته دیگر که بد نیست به آن توجه کنید این است که ما قبلا (در مباحث دیگر)، ابتدای روش onOptionsItemSelected را به صورت زیر می نوشتیم :
کد:
[COLOR=#000000][FONT=Tahoma][FONT=monospace][B]public[/B] [COLOR=#000066][B]boolean[/B][/COLOR] onOptionsItemSelected[COLOR=#009900]([/COLOR][COLOR=#003399]MenuItem[/COLOR] item[COLOR=#009900])[/COLOR] [COLOR=#009900]{[/COLOR][/FONT]
[/FONT][/COLOR]
اما برای ActionBarSherlock ، آن را به صورت زیر نوشته ایم (به این تفاوت دقت کنید) :
کد:
[COLOR=#000000][FONT=Tahoma][FONT=monospace][B]public[/B] [COLOR=#000066][B]boolean[/B][/COLOR] onOptionsItemSelected[COLOR=#009900]([/COLOR]com.[COLOR=#006633]actionbarsherlock[/COLOR].[COLOR=#006633]view[/COLOR].[COLOR=#003399]MenuItem[/COLOR] item[COLOR=#009900])[/COLOR] [COLOR=#009900]{[/COLOR][/FONT]
[/FONT][/COLOR]
همچنین توجه داشته باشید که در کدهایی که نوشته ایم، برای روش onOptionsItemSelected ، تعدادی item دلخواه را در نظر گرفته ایم که تنها برای درک چگونگی تعیین عملکرد action bar ، هنگام اشاره بر روی item های action bar می باشد و شما باید آنها را مطابق موارد مورد نظر خود، تغییر بدهید.
 

P O U R I A

مدیر مهندسی شیمی مدیر تالار گفتگوی آزاد
مدیر تالار
چگونگی استفاده از Proguard برای پروژه اندرویدی که در آن از کتابخانه ActionBarSherlock استفاده شده است

چگونگی استفاده از Proguard برای پروژه اندرویدی که در آن از کتابخانه ActionBarSherlock استفاده شده است

چگونگی استفاده از Proguard برای پروژه اندرویدی که در آن از کتابخانه ActionBarSherlock استفاده شده است (برای جلوگیری از بروز Force Close)، در برنامه نویسی اندروید :


چنانچه در پروژه اندروید خود، از کتابخانه ActionBarSherlock استفاده کرده باشید، هنگامی که برای پروژه مورد نظر، Proguard را فعال کنید (که برای محافظت از کدها برای عدم مهندسی معکوس به کار می رود)، با Force Close (بسته شدن برنامه اندروید) مواجه می شوید.
برای برطرف کردن این مشکل، بعد از اینکه proguard را فعال کردید، باید فایل proguard-project.txt را باز کنید :


1100.png

سپس کد زیر را به انتهای کدهای آن اضافه کنید (در یک خط جدید) :
کد:
[COLOR=#000000][FONT=Tahoma][FONT=monospace][COLOR=#339933]-[/COLOR]keep [B]class[/B] com.[COLOR=#006633]actionbarsherlock[/COLOR].[COLOR=#339933]**[/COLOR] [COLOR=#009900]{[/COLOR][COLOR=#339933]*;[/COLOR][COLOR=#009900]}[/COLOR][/FONT]
[/FONT][/COLOR]
مشکل حل می شود و دیگر با Force Close روبرو نخواهید شد.
 
بالا