Java 如何创建一个类,在单击图像按钮时显示toast消息一次?
我的应用程序上有多个图像按钮,我希望在单击每个按钮时显示一条祝酒词。然而,在我的代码中,我不喜欢这样的想法:一次又一次地为每个图像按钮设置连续的toast消息。有没有办法像在课堂上那样缩短这些消息?如果有,我该怎么做?注意:我唯一不想让祝酒词出现的是客房服务按钮 我的代码:Java 如何创建一个类,在单击图像按钮时显示toast消息一次?,java,android,Java,Android,我的应用程序上有多个图像按钮,我希望在单击每个按钮时显示一条祝酒词。然而,在我的代码中,我不喜欢这样的想法:一次又一次地为每个图像按钮设置连续的toast消息。有没有办法像在课堂上那样缩短这些消息?如果有,我该怎么做?注意:我唯一不想让祝酒词出现的是客房服务按钮 我的代码: public class MainMenu extends AppCompatActivity { private ImageButton roomservice, transportation, foodservice,
public class MainMenu extends AppCompatActivity {
private ImageButton roomservice, transportation, foodservice, maintenance, checkout, baggagecollection;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main_menu);
getSupportActionBar().setTitle("MainMenu");
roomservice = (ImageButton) findViewById(R.id.roomservice);
transportation = (ImageButton) findViewById(R.id.transportation);
foodservice = (ImageButton) findViewById(R.id.foodservice);
maintenance = (ImageButton) findViewById(R.id.maintenance);
checkout = (ImageButton) findViewById(R.id.checkout);
baggagecollection = (ImageButton) findViewById(R.id.baggagecollection);
roomservice.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
openRoomServiceMenu(); // creates main menu method name
}
});
transportation.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
Toast.makeText(MainMenu.this, "This action is unavailable", Toast.LENGTH_LONG).show();
}
});
foodservice.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
Toast.makeText(MainMenu.this, "This action is unavailable", Toast.LENGTH_LONG).show();
}
});
maintenance.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
Toast.makeText(MainMenu.this, "This action is unavailable", Toast.LENGTH_LONG).show();
}
});
checkout.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
Toast.makeText(MainMenu.this, "This action is unavailable", Toast.LENGTH_LONG).show();
}
});
baggagecollection.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
Toast.makeText(MainMenu.this, "This action is unavailable", Toast.LENGTH_LONG).show();
}
});
}
您可以尝试其中一种方法来减少重复代码 只需创建一个单独的类并在该类上定义静态方法即可显示toast
public class CommonUtils {
public static void showToast(Context context,String message){
Toast.makeText(context, message, Toast.LENGTH_LONG).show();
}
}
然后从Activity/Fragment调用此方法
CommonUtils.showToast(this,"Your Message");
这是一个很好的练习,不要重复你自己 因此,您可以传递自定义侦听器类的对象
private class MyListener implements View.OnClickListener // make an inner class
{
String msg;
MyListener(String msg){this.msg = msg;} // if you want separate msg for each image , otherwise omit the constructor
@Override
public void onClick(View view){
Toast.makeText(MainActivity.this,msg,Toast.LENGTH_LONG).show();
}
}
现在将其设置为按钮式
maintainance.setOnClickListener(new MyListener("your msg"));
我不建议创建一个全新的ImageView类,如果它在单击时只显示toast。您可以做的是创建新类型的click Listener,它将实现View.onClick Listener,并将string或string资源作为构造函数参数。之后,单击新的click listener并在那里显示toast。最后,将视图的click listener设置为新创建的类,并在要在toast中显示的构造函数中传递字符串。这样,如果您希望按钮或其他类型的视图具有相同的功能,就不会被迫创建新类型的类。您可以在活动中创建方法
void handleClickWithToast(字符串消息,int持续时间){
Toast.makeText(main menu.this、message、length.show();
}
甚至更短
void handleClickWithLongToast(字符串消息){
Toast.makeText(main menu.this、message、Toast.LENGTH_LONG.show();
}
并在“单击侦听器”中调用它
transportation.setOnClickListener(新视图.OnClickListener(){
@凌驾
公共void onClick(视图v){
handleClickWithLongToast(“此操作不可用”);
}
});
或者可以使用静态方法创建utils类
class-ToastUtils{
公共静态void showShortToast(上下文、字符串消息){
showToast(上下文、消息、Toast.LENGTH\u SHORT);
}
公共静态void showLongToast(上下文、字符串消息){
showToast(上下文、消息、Toast.LENGTH\u LONG);
}
私有静态void showtoos(上下文上下文、字符串消息、整数持续时间){
Toast.makeText(上下文、消息、持续时间).show();
}
}
您还可以创建自定义视图。单击Listener
公共类LongToastClickListener实现View.OnClickListener{
私有字符串消息;
LongToastClickListener(字符串消息){
this.message=消息;
}
@凌驾
公共void onClick(视图){
ToastUtils.showLongToast(view.getContext(),message);
}
}
然后把它用在你的按钮上
button.setOnClickListener(新的LongToastClickListener(“消息”);
您还提供了一个示例HI,这非常有帮助。我收到一个错误,说找不到符号变量LENGH_LONG
对不起,拼写错误,它是长度,您已经知道了,它在您的问题中。我在MainActivity上遇到了一个错误。这个
表示不是一个封闭类
,正如我在回答中提到的,您需要将其实现为一个内部类,这意味着我提供的类需要位于MainActivity类的主体内。谢谢您的帮助。但是如果我想在每个按钮上显示相同的消息,我是否必须在每个按钮上设置ClickListener,并重复相同的文本?或者是否有其他方式显示消息。例如,如果我想在单击时在所有图像按钮上重复“your msg”,我是否必须复制并粘贴每行代码?