【问题标题】:Button isn't working按钮不工作
【发布时间】:2015-07-31 01:08:06
【问题描述】:

所以伙计们,我正在创建一个应用程序,在这个布局中我显示 2 个 EditText,当用户单击其中任何一个时,它会显示一个弹出菜单,当他们单击弹出菜单的一个项目时,它将设置edittext 的文本与他们单击的项目的文本相同。这部分正在工作。但是我会有一个按钮,它会做某些事情,但我只是在测试这个按钮,看看它是否工作,但是当我点击按钮时没有任何反应,我不知道为什么。代码如下:

public class horariosMenu extends Activity implements PopupMenu.OnMenuItemClickListener {

@Override
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_horarios_menu);

    Button buttonProcurar = (Button) findViewById(R.id.buttonProcurar);
    final EditText deTextPartida = (EditText) findViewById(R.id.deText);
    final EditText paraTextDestino = (EditText) findViewById(R.id.paraText);
    buttonProcurar.setOnClickListener(
            new Button.OnClickListener(){
                @Override
                public void onClick(View v) {
                    verifica(deTextPartida.getText().toString(), paraTextDestino.getText().toString());
                }
            }
    );
}


public void showPopUp(View view){
    PopupMenu popupMenu = new PopupMenu(this, view);
    popupMenu.setOnMenuItemClickListener(horariosMenu.this);
    MenuInflater menuInflater = popupMenu.getMenuInflater();
    menuInflater.inflate(R.menu.popup_menu_locais, popupMenu.getMenu());
    popupMenu.show();
}

public void showPopUpMenu_Para(View view){
    PopupMenu popupMenuPara = new PopupMenu(this, view);
    popupMenuPara.setOnMenuItemClickListener(horariosMenu.this);
    MenuInflater menuinflaterPara = popupMenuPara.getMenuInflater();
    menuinflaterPara.inflate(R.menu.popup_menu_locais_para, popupMenuPara.getMenu());
    popupMenuPara.show();
}

@Override
public boolean onMenuItemClick(MenuItem item) {
    EditText deText = (EditText) findViewById(R.id.deText);
    EditText paraText = (EditText) findViewById(R.id.paraText);
    switch(item.getItemId()){
        case R.id.id_Coimbra:
            deText.setText("Coimbra", null);
            return true;
        case R.id.id_SJoao:
            deText.setText("S. Joao", null);
            return true;
        case R.id.id_SSilvestre:
            deText.setText("S. Silvestre", null);
            return true;
        case R.id.id_SMartinho:
            deText.setText("S. Martinho", null);
            return true;
        case R.id.id_Tentugal:
            deText.setText("Tentugal", null);
            return true;
        case R.id.id_Carapinheira:
            deText.setText("Carapinheira", null);
            return true;
        case R.id.id_Montemor:
            deText.setText("Montemor", null);
            return true;
        case R.id.id_Maiorca:
            deText.setText("Maiorca", null);
            return true;
        case R.id.id_Figueira:
            deText.setText("Figueira da Foz", null);
            return true;
        //EDIT TEXT "PARA":
        case R.id.id_Coimbra_Para:
            paraText.setText("Coimbra", null);
            return true;
        case R.id.id_SJoao_Para:
            paraText.setText("S. Joao", null);
            return true;
        case R.id.id_SSilvestre_Para:
            paraText.setText("S. Silvestre", null);
            return true;
        case R.id.id_SMartinho_Para:
            paraText.setText("S. Martinho", null);
            return true;
        case R.id.id_Tentugal_Para:
            paraText.setText("Tentugal", null);
            return true;
        case R.id.id_Carapinheira_Para:
            paraText.setText("Carapinheira", null);
            return true;
        case R.id.id_Montemor_Para:
            paraText.setText("Montemor", null);
            return true;
        case R.id.id_Maiorca_Para:
            paraText.setText("Maiorca", null);
            return true;
        case R.id.id_Figueira_Para:
            paraText.setText("Figueira da Foz", null);
            return true;
    }
    return false;
}

public void verifica(String a, String b) {
    if (a == b) {
        Toast.makeText(getBaseContext(), "Partida e destino nao podem ser iguais, escolha de novo!", Toast.LENGTH_LONG);
    }
}

}

至少现在,当两个 EditText 的文本相同时,按钮才会起作用。这就是我调用 verifica(String, String) 函数的原因,当我测试时,我把两者都放在了相同的地方,但它不起作用。 你们能检查一下发生了什么吗?

【问题讨论】:

  • 只需在onClick()中添加一个Toast,看看是否显示Toast..只是为了调试..
  • @Lal “只是为了调试”?我的意思是调试的方法是附加调试器并按下按钮。无需重新编译、重新安装和重新运行...

标签: android button android-studio


【解决方案1】:

Toast 必须从 UI 线程使用 runOnUiThread 显示

你还需要展示吐司

Toast.makeText(...).show();

对于比较字符串,您应该使用equals

【讨论】:

  • 呸,你是对的,按钮正在工作,我只是错过了 .show() 。我是智障啊,谢谢男人
【解决方案2】:

您的按钮可能正在工作。您不能将两个字符串与== 进行比较。您必须使用compareTo 函数来比较字符串。

public void verifica(String a, String b) {
    if (a.compareTo(b)) {
        Toast.makeText(getBaseContext(), "Partida e destino nao podem ser iguais, escolha de novo!", Toast.LENGTH_LONG);
    } 
} 

【讨论】:

  • 当我这样做时,它给了我一个错误,说:“不兼容的类型,必需:布尔值,找到:int”我这里没有任何 int 值 O.o
猜你喜欢
  • 2016-04-27
  • 1970-01-01
  • 2016-01-05
  • 2017-07-24
  • 1970-01-01
  • 1970-01-01
  • 2021-10-13
  • 1970-01-01
  • 2022-11-25
相关资源
最近更新 更多