Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/342.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 如何创建一个类,在单击图像按钮时显示toast消息一次?_Java_Android - Fatal编程技术网

Java 如何创建一个类,在单击图像按钮时显示toast消息一次?

Java 如何创建一个类,在单击图像按钮时显示toast消息一次?,java,android,Java,Android,我的应用程序上有多个图像按钮,我希望在单击每个按钮时显示一条祝酒词。然而,在我的代码中,我不喜欢这样的想法:一次又一次地为每个图像按钮设置连续的toast消息。有没有办法像在课堂上那样缩短这些消息?如果有,我该怎么做?注意:我唯一不想让祝酒词出现的是客房服务按钮 我的代码: public class MainMenu extends AppCompatActivity { private ImageButton roomservice, transportation, foodservice,

我的应用程序上有多个图像按钮,我希望在单击每个按钮时显示一条祝酒词。然而,在我的代码中,我不喜欢这样的想法:一次又一次地为每个图像按钮设置连续的toast消息。有没有办法像在课堂上那样缩短这些消息?如果有,我该怎么做?注意:我唯一不想让祝酒词出现的是客房服务按钮

我的代码:

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”,我是否必须复制并粘贴每行代码?