add onclick listener to predefined button?
I've got the following button in my xml layout file...
<Button
android:layout_width="150dip"
android:id="@+id/button1"
android:layout_height="50dip"
android:text="@string/l开发者_如何学Googin"
android:layout_marginRight="10dip">
</Button>
I'd like to programmatically add an onclick()
listener in it's Java file. How would I do this?
You just need something like this:
Button buttonOne = (Button) findViewById(R.id.button1);
buttonOne.setOnClickListener(new Button.OnClickListener() {
public void onClick(View v) {
//Do stuff here
}
});
This answer comes from Five Ways to Wire Up an Event Listener. Please read that blog post for a fuller explanation from the author. See my other answer for these five ways reworked to add multiple onClick listeners.
1. Member Class
public class main extends Activity {
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.main);
//attach an instance of HandleClick to the Button
findViewById(R.id.button1).setOnClickListener(new HandleClick());
}
private class HandleClick implements OnClickListener{
public void onClick(View arg0) {
Button btn = (Button)arg0; //cast view to a button
// get a reference to the TextView
TextView tv = (TextView) findViewById(R.id.textview1);
// update the TextView text
tv.setText("You pressed " + btn.getText());
}
}
}
2. Interface Type
public class main extends Activity {
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.main);
//use the handleClick variable to attach the event listener
findViewById(R.id.button1).setOnClickListener(handleClick);
}
private OnClickListener handleClick = new OnClickListener(){
public void onClick(View arg0) {
Button btn = (Button)arg0;
TextView tv = (TextView) findViewById(R.id.textview1);
tv.setText("You pressed " + btn.getText());
}
};
}
3. Anonymous Inner Class
public class main extends Activity {
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.main);
findViewById(R.id.button1).setOnClickListener(new OnClickListener(){
public void onClick(View arg0) {
Button btn = (Button)arg0;
TextView tv = (TextView) findViewById(R.id.textview1);
tv.setText("You pressed " + btn.getText());
}
});
}
}
4. Implementation in Activity
public class main extends Activity implements OnClickListener{
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.main);
findViewById(R.id.button1).setOnClickListener(this);
}
public void onClick(View arg0) {
Button btn = (Button)arg0;
TextView tv = (TextView) findViewById(R.id.textview1);
tv.setText("You pressed " + btn.getText());
}
}
5. Attribute in View Layout for OnClick Events
public class main extends Activity{
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.main);
}
public void HandleClick(View arg0) {
Button btn = (Button)arg0;
TextView tv = (TextView) findViewById(R.id.textview1);
tv.setText("You pressed " + btn.getText());
}
}
xml:
<Button android:id="@+id/button1"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="Button 1"
android:onClick="HandleClick"/>
You can try this.
public class myNewClass extends Activity implements OnClickListener {
...................
...................
Button button = (Button)findViewById(R.id.button1);
button.setOnClickListener(this);
public void onClick(View v) {
Intent i = new Intent();
Bundle extras = new Bundle();
// This will catch the button click
// Now do what you wanted to do as a
// result of the onClick
}
}
You can apply onClicklistner in Two way :
1. Under onCreate Method
2. Out side onCreate Method
if we will use under onCreate method then we will use like this:-
protected void onCreate(@Nullable Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_my_graphics1);
textview1 = (TextView) findViewById(R.id.textview1);
circleBtn = (Button) findViewById(R.id.circleBtn);
// Click Listner Under on Create Method
circleBtn.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
}
});
}
if You want out side to onCreate Method then first register the onClickListner in onCreate Method like this :-
@Override
protected void onCreate(@Nullable Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_my_graphics1);
circleBtn = (Button) findViewById(R.id.circleBtn);
**// Register on click on button
circleBtn.setOnClickListener(new ClickMe());**
}
and then implement clicklistner outside of onCreate Method so full code will be like this :-
public class ActiononBtn extends AppCompatActivity {
private TextView textview1;
private Button circleBtn;
@Override
protected void onCreate(@Nullable Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_my_graphics1);
textview1 = (TextView) findViewById(R.id.textview1);
circleBtn = (Button) findViewById(R.id.circleBtn);
// Register on click on button
circleBtn.setOnClickListener(new ClickMe());
} // Close onCreate Method
private class ClickMe implements View.OnClickListener {
public void onClick(View v) {
}
}
}//Close main Activity Class
1.use findViewById(R.id.button1).setOnClickListener(this);
2.and activty implements OnClickListener
<Button
android:id="@+id/btnOk"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:text="Ok"
android:layout_marginRight="50dp"
android:layout_marginLeft="50dp"/>
public class MainActivity extends AppCompatActivity {
Button btnOk;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
btnOk = findViewById(R.id.btnOk);
btnOk.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
Toast.makeText(MainActivity.this, "This button ok click.", Toast.LENGTH_SHORT).show();
}
});
}
}
精彩评论