Onclick in XML ii.. Inline anonymous listener iii.. Activity is listener iv.. Explicit listener class vi... Inline anonymous listener • Xây d ng ph ng th c ngay trong thân hàm đang xây d
Trang 1CÁC KI U L P TRÌNH S KI N
TRÊN ANDROID
Ch ng 7
Lê V n H nh
levanhanhvn@gmail.com
Trang 2N I DUNG
1 Listener
3 Các ki u l p trình s ki n trong Android
Trang 31 LISTENER
• Các Listener đ c s d ng đ b t 1 s ki n nào đó.
– OnKeyListener : dùng đ b t s ki n khi nh n 1 phím c a
đi n tho i.
– OnClickListener : dùng đ b t s ki n ch m vào 1 View đang hi n th trên màn hình.
• M i View đ u ph i set Listener riêng đ x lý cho s
ki n t ng tác v i view đó
• M i lo i View l i có nh ng Listener dành riêng cho
riêng mình
VD: Button: setOnKeyListener
CheckBox: setOnCheckChangedListener Button: setOnClickListener
Trang 42 XÂY D NG PH NG TH C CHO S KI N
• M t đ i t ng (Button, TextView…) mu n đ c giao nhi m v s lý s ki n c a ng i dùng thì đ i t ng đó
ph i hi n th c interface OnClickListener và cài đ t
ph ng th c onClick.
• Khi ng i dùng nh n lên button thì h th ng s báo cho
đ i t ng main bi t b ng cách g i ph ng th c
onClick().
• Trong Android có 6 ki u l p trình s ki n:
i Onclick in XML
ii Inline anonymous listener iii Activity is listener
iv Listener in variable
v Explicit listener class
vi View Subclassing
Trang 53 CÁC KI U L P TRÌNH S KI N TRONG Android
3.1 Onclick in XML
• Xây d ng ph ng th c đ c l p Gán s ki n cho view
ngay trong file layout.xml thông qua thu c tính
android:onClick
• Cách này th ng dùng khi có nhi u view (button,
EditText, TextView, …) cùng dùng chung 1 ph ng
th c.
• Cách này ph i có d ng
public void TênPh ngTh c(View v)
trong đó: v chính là đ i t ng b tác đ ng.
android:onCLick =”OnButtonClick” cho nhi u đ i
t ng khác nhau.
Trang 63 CÁC KI U L P TRÌNH S KI N TRONG Android
3.1 Onclick in XML (tt)
• Ví d 1:
– B1: Vi t hàm x lý s ki n
public class MainACtivity extends Activity
{
public void btn_tong2so (View v) {
int a,b;
EditText edita=(EditText) findViewById(R.id.edtsoa); a=Integer.parseInt(edita.getText ()+””);
EditText editb=(EditText) findViewById(R.id.edtsob); b=Integer.parseInt(editb.getText ()+””);
TextView txtkq= (TextView) findViewById(R.id.txtkq); txtkq.setText((a+b )+””);
} // các hàm khác }
Trang 73 CÁC KI U L P TRÌNH S KI N TRONG Android
3.1 Onclick in XML (tt)
– B2: trong file layout.xml, t i tag Button, them thu c tính onClick
<!– các khai báo khác trong file layout.xml>
<Button
android:id=”@+id/btntong2so”
android:layout_width="wrap_content"
android:layout_height="wrap_content“
android:text=”T ng 2 s ”
android:onClick= ”btn_tong2so” />
<!– các khai báo khác trong file layout.xml>
Trang 83 CÁC KI U L P TRÌNH S KI N TRONG Android
3.1 Onclick in XML (tt)
• Ví d 2:
Vi t mã l nh cho ph ng th c
public void OnButtonClick(View v) { String chuoiTen = et.getText().toString();
tv.setText("Xin chào " + chuoiTen);
}
Trong file xml, thêm dòng khai báo
<Button android:id="@+id/button"
android:text="Button"
android:layout_width="wrap_content"
android:layout_height="wrap_content">
android:onCLick=”OnButtonClick”
</Button>
Trang 93 CÁC KI U L P TRÌNH S KI N TRONG Android
3.2 Inline anonymous listener
• Xây d ng ph ng th c ngay trong thân hàm đang xây d ng (inner),
thông th ng là hàm Main.
• o n implement này không gõ b ng tay mà ch c n nh n t h p phím
Ctrl + 1 ch n add unimplement method.
• Ví d 1: chuy n đ i n m âm l ch
– Vi t hàm x lý s ki n
public class MainActivity extends Activity
{ protected void onCreate(Bundle savedInstanceState)
{ Super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
Button btnDoi=(Button) findViewById(R.id.button1);
btnDoi.setOnClickListener(new View.OnClickListener() { @Override
public void onClick(View arg0) { //B1: l y giá tr t EditText //B2: ép giá tr nh p vào v s nguyên cho bi n X //B3: t X tính ra Can + Chi
} }
// các l nh cho các view khác có trong giao di n
}
// các hàm khác
}
Trang 103 CÁC KI U L P TRÌNH S KI N TRONG Android
3.2 Inline anonymous listener (tt)
• Ví d 1: chuy n đ i n m âm l ch
public class main extends Activity implements OnClickListener { TextView tv;
Button btn;
EditText et;
@Override
public void onCreate(Bundle savedInstanceState)
{ super.onCreate(savedInstanceState);
setContentView(R.layout.main);
tv = (TextView)findViewById(R.id.tv);
et = (EditText)findViewById(R.id.et);
btn = (Button)findViewById(R.id.btn);
btn.setOnClickListener(new View.OnClickListener
{ @Override
public void onClick(View v) { String chuoiTen = et.getText().toString();
tv.setText("Xin chào " + chuoiTen);
} }) ;
}
Trang 113 CÁC KI U L P TRÌNH S KI N TRONG Android
3.3 Activity is listener
• Xây d ng ph ng th c đ c l p, gán ch c n ng th c hi n qua
ph ng th c setOnClickListener
• Ví d : Vi t hàm x lý s ki n
public class MainActivity extends Activity implements OnClickListener
{ Button btn;
// các khai báo bi n khác
@Override
protected void onCreate(Bundle savedInstanceState)
{ super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
btn=(Button) findViewById(R.id.button1);
btn.setOnClickListener(this);
// x lý các view khác }
@Override
public void onClick(View arg0)
{ // vi t l nh x lý cho s ki n onClick trên button
}
}
Trang 123 CÁC KI U L P TRÌNH S KI N TRONG Android
3.4 Listener in variable
– T ng t nh Activity is listener, nh ng khác ch
thay vì implement interface cho Activity thì nó l i
đ c l u tr vào m t bi n có ki u Listener trong
Activity.
– u đi m: có th chia s chung m t bi n s ki n cho
các control khác nhau.
Trang 133 CÁC KI U L P TRÌNH S KI N TRONG Android
3.4 Listener in variable (tt)
• Ví d :
public class LoginExampleVariableImplementation extemds Activity
{ /* các l nh khác */
OnClickListener myClickListener = new OnClickListener()
@override public void onClick (View v) { if (v==btnLogin)// n u view là btnLogin
{ // check login }
else // view là btnCancel
{ //close application }
};
/**Called when the activity is first created */
@override public void onCreate(Bundle savedInstanceState) {
Super.onCreate(savedInstanceState);
/* các l nh khác */
btnLogin.setOnClickListener(myClickListener); btnCancel.setOnClickListener(myClickListener);
}
// các hàm khác
}
Trang 143 CÁC KI U L P TRÌNH S KI N TRONG Android
3.5 Explicit listener class
• Tách riêng m t class đóng vai trò là class s ki n
ng d ng quá nhi u và ph c t p Nh v y, giúp d
qu n lý ch ng trình.
Trang 153 CÁC KI U L P TRÌNH S KI N TRONG Android
3.5 Explicit listener class (tt)
• Ví d :
public class MainActivity extends Activity
{
Button btnTieptuc,btnGiai,btnThoat;
@Override
protected void onCreate(Bundle savedInstanceState)
setContentView(R.layout.activity_main);
btnTieptuc=(Button) findViewById(R.id.btntieptuc); btnGiai=(Button) findViewById(R.id.btngiaipt);
btnThoat=(Button) findViewById(R.id.btnthoat);
btnTieptuc.setOnClickListener(new MyEvent() );
btnGiai.setOnClickListener(new MyEvent() );
btnThoat.setOnClickListener(new MyEvent() );
// các l nh khác }
{ @Override
public void onClick(View arg0)
{ // tri n khai các l nh đ x lý tùy vào button đ c ch n }
} }
Trang 163 CÁC KI U L P TRÌNH S KI N TRONG Android
3.6 View Subclassing
• K thu t này ít ph bi n.
• Thêm control đ ng vào màn hình lúc runtime Thêm
s ki n đ ng cho button đ ng v a phát sinh.
• Ph i override ch ng trình performClick c a chính
button control
Trang 173 CÁC KI U L P TRÌNH S KI N TRONG Android
3.6 View Subclassing (tt)
• Ví d :
public class MainActivity extends Activity
{ @Override
protected void onCreate(Bundle savedInstanceState)
{ super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
Button btn = new Button(this)
public boolean performClick() {
return false;
} };
LinearLayout layout=(LinearLayout)findViewById(R.id.linearlayout)
layout.addView(btn);
}
}