天天看點

android 監聽事件的處理

android對監聽事件的處理可以分為4種

第一種:内部類作為事件監聽器類

内部類有兩種:分别為匿名内部類和不匿名内部類,其中大部分事件監聽類都是使用匿名内部類。

其中的好處有:1.可以在目前類中複用該監聽器類

  2.可以自由通路外部類的所有界面元件

代碼

b1.setOnClickListener(new OnClickListener(){

			@Override
			public void onClick(View v) {
				// TODO Auto-generated method stub
				Intent intet = new Intent(MainActivity.this,seekbar.class);
				startActivity(intet);
				//finish();
			}
			
		});
           

第二種:外部類作為事件監聽器類

比較少見,其中優點為:

1.當某個事件監聽器被多個GUI界面共享,且主要是完成某種業務邏輯的實作

其中确定為:

1.不利于提高程式的内聚性

2.不能自由通路建立GUI界面類的元件,程式設計不夠簡潔

定義外部類代碼

public class sd implements OnClickListener{
	
	public sd(){
		
	}
	
	@Override
	public void onClick(View v) {
		// TODO Auto-generated method stub
		//定義處理
	}
	
           

調用外部類

b1.setOnClickListener(new sd()});

第三種:Activity本身作為事件監聽器

可以直接在Activity中定義事件處理方法

其中優點為:非常簡潔

缺點為:

1.這種形式可能造成程式結構混亂。Activity的主要職責應該是完成界面初始化;但此時還需包含事件處理器方法,進而引起混亂

2.如果activity界面類需要實作監聽器接口,讓人感覺比較怪異。

代碼為:

public class ActivityListener extends Activity implements OnClickListener {
	EditText show;
	Button bn;
	
	@Override
	protected void onCreate(Bundle savedInstanceState) {
		super.onCreate(savedInstanceState);
		setContentView(R.layout.main);
		show = (EditText)findViewById(R.id.show);
		bn = (Button)findViewById(R.id.bn);
		bn.setOnClickListener(this);
	}

	@Override
	public boolean onCreateOptionsMenu(Menu menu) {
		// Inflate the menu; this adds items to the action bar if it is present.
		getMenuInflater().inflate(R.menu.activity_listener, menu);
		return true;
	}

	@Override
	public void onClick(View v) {
		// TODO Auto-generated method stub
		show.setText("按鈕被單擊了!");
	}

}
           

第四種:直接綁定到标簽

在布局中要發送事件源中定義一個:

android:onClick="clickHandler"

然後在該布局對應的Activity定義一個 void clickHandler(void source)方法

繼續閱讀