最近的案子很特別,除了一堆 Activity 外,每一個 Activity 裡頭又有一堆 Button/ImageButton 要處理,如果是依照一般教學文:

Button b = null;
if( ( b = (Button)findViewById( R.id.button01) ) != null )
        b.setOnClickListener( new Button.OnClickListener(){ /* ... */ } );
if( ( b = (Button)findViewById( R.id.button02) ) != null )
        b.setOnClickListener( new Button.OnClickListener(){ /* ... */ } );
...

假設有 20~30 個按鈕,就得用 findViewById 處理 20~30 次,程式碼就又臭又長。另一種作法則是把每個 Button/ImageButton 都設定為同一個 Button.OnClickListener 來管理,透過 View.getId() 來偵測,的確可以省記憶體,但還是不免要把 layout 上一堆按鈕都先 findViewById 一下,後來跟同事閒聊時,恰好提到用動態新增按鈕的方式,於是被 loop 關鍵字提醒一下,就來惡搞了:

void initOnClickListener() {

        int my_ids[] = {
                R.id.button01, R.id.button02, R.id.button03, ...
        };

        Button b = null;
        for( int i=0 ; i< ids.length ; ++i )
                if( ( b = (Button)findViewById( my_ids[i]) ) != null )
                        b.setOnClickListener(this);
}

public void onClick(View v) {
        switch( v.getId() ) {
                case R.id.button01:
                        break;
                case R.id.button02:
                        break;
                // ...
        }
}

其中的 this 就是指 MyActivity extends Activity implements OnClickListener,如此一來可以用最簡短的程式碼,很方便的初始化 layout 上頭的按鈕,也不用每個按鈕都 new Button.OnClickListener 出來,也會省記憶吧。這樣管理 Button/ImageButton 還滿方便的,只需把要偵測的按鈕,將其 R.id.name 擺在 array 裡頭,跑 loop 來解決就好啦。如果有用  PagerAdapter/ViewPager 實作 iOS PageControl 的話,更可以用多階層來管理:

final int cntView = 3;
int my_ids[][] = {
        {
                R.id.view1_btn1 , R.id.view1_btn2 , R.id.view1_btn3, ...
        } , 
        {
                R.id.view2_btn1 , R.id.view2_btn2 , R.id.view2_btn3, ...
        } ,
        {
                R.id.view3_btn1 , R.id.view3_btn2 , R.id.view3_btn3, ...
        }
}; 

for( int i=0 ; i<cntView ; ++i ) {
        for( int j=0 ; j<my_ids[i].length ; ++j ) {
                if( ( b = (Button)mPageView.get(i).findViewById( my_ids[i]) ) != null )
                        b.setOnClickListener( this );
        }

其中 mPageView 用來記錄每個 page 的 Activity 囉。


, ,

changyy 發表在 痞客邦 PIXNET 留言(0) 人氣()