将两个onClick()方法中的代码重构为一个常用方法

时间:2014-07-29 00:57:18

标签: java android android-activity

Sutck关于重构Android代码的代码挑战。

将两个onClick()方法中的代码重构为一个名为trackButtonPress()的常用方法。使其成为MainActivity.java的公共方法。

 public class MainActivity extends Activity {        
        public static final String TAG = MainActivity.class.getSimpleName();        
        public Button mButton1;
        public Button mButton2;        
        /*
         * Some code has been omitted for brevity
         */   

       @Override
        public void onCreate(Bundle savedInstanceState) {
            super.onCreate(savedInstanceState);
            setContentView(R.layout.activity_main);        
            mButton1 = (Button)findViewById(R.id.button1);
            mButton2 = (Button)findViewById(R.id.button2);        
            trackButtonPress();
        }                               
          mButton1.setOnClickListener(new View.OnClickListener() {        
                trackButtonPress();
                }              
        }
                mButton2.setOnClickListener(new View.OnClickListener() {          
                trackButtonPress();
                }              
        }

   public void trackButtonPress() {
                public void onClick(View view) {
                    Toast.makeText(MainActivity.this, "A button was pressed", Toast.LENGTH_LONG).show();
                    Log.i(TAG, "A button was pressed");
                }               
            }   

请帮助!!!

1 个答案:

答案 0 :(得分:0)

在每个OnClickListener中,您需要覆盖onClick,这需要View作为参数。

在方法trackButtonPress中,您还应传递View参数。

public void trackButtonPress(View v) {
    // see below
}

然后,如果存储对视图的引用,则可以测试单击了哪个视图。

if (v == view1) {
    // do stuff
} else if (v == view2) {
    // do other stuff
} // etc..

这将提供预期的功能。