【问题标题】:Toast Message not working android吐司消息不起作用android
【发布时间】:2014-11-06 06:34:56
【问题描述】:

我有 2 个类 BlockIdActivity.java 和 ScanWifi.java。我在 BlockIdActivity.java 文件中有 2 个按钮,我可以看到我的 toast 在那里定义。但是我看不到我在 ScanWifi.Java 类中定义的按钮的吐司。

以下是 BlockIdActivity.java 的代码

import android.os.Bundle;
import android.support.v7.app.ActionBarActivity;
import android.text.TextUtils;
import android.view.Menu;
import android.view.MenuItem;
import android.view.View;
import android.widget.ImageButton;
import android.widget.TextView;
import android.widget.Toast;


public class BlockIdActivity extends ActionBarActivity {

private ImageButton mUpButton;
private ImageButton mDownButton;
private TextView mBlock_Id_Field;
int counter;

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

    mUpButton = (ImageButton)findViewById(R.id.arrow_up);
    mDownButton = (ImageButton)findViewById(R.id.arrow_down);
    mBlock_Id_Field = (TextView)findViewById(R.id.BlockIdField);


    mUpButton.setOnClickListener(new View.OnClickListener() {
        @Override
        public void onClick(View v) {

            if (mBlock_Id_Field.getText().toString().trim().equals(""))
         {
                counter = 1;
                mBlock_Id_Field.setText(String.valueOf(counter));
         }
            else {
                counter = Integer.valueOf(mBlock_Id_Field.getText().toString().trim());
                counter++;
                mBlock_Id_Field.setText(String.valueOf(counter));
            }

        }
        });

    mDownButton.setOnClickListener(new View.OnClickListener() {

        @Override
        public void onClick(View v) {
            int counter = Integer.valueOf(mBlock_Id_Field.getText().toString().trim());
        //  boolean emptyfield = mBlock_Id_Field.getText().toString().equals("");  

            if(counter <=1 ){
                Toast.makeText(BlockIdActivity.this,
                        R.string.negative_blockid_toast,
                        Toast.LENGTH_SHORT).show();
                counter = 1;
                mBlock_Id_Field.setText(String.valueOf(counter));
            }else {
                counter--;
            mBlock_Id_Field.setText(String.valueOf(counter));
            }

        }
    });
    }

}

ScanWifi.java 的代码

import android.os.Bundle;
import android.support.v7.app.ActionBarActivity;
import android.view.View;
import android.widget.Button;
import android.widget.Toast;

public class ScanWifi extends ActionBarActivity {

    private Button mScanWifiButton;

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

        mScanWifiButton = (Button)findViewById(R.id.ScanWifiButton);
        mScanWifiButton.setOnClickListener(new View.OnClickListener() {

            @Override
            public void onClick(View v) {

                Toast.makeText(getBaseContext(),
                        R.string.ScanWifi_toast,
                        Toast.LENGTH_SHORT).show();

            }

    });

    }

}

这是 strings.xml 文件:

<resources>

    <string name="app_name">SnifferTrain</string>
    <string name="BlockId">BlockId</string>
    <string name="ScanWifi">ScanWifi</string>
    <string name="ScanWifi_toast">ScanWifi Button Pressed</string>
    <string name="negative_blockid_toast">Block Id Field Cannot Be Less Than 1 or Empty.Setting BlockID To 1</string>
    <string name="action_settings">Settings</string>

</resources>

有人可以解释为什么我按下 ScanWifi 按钮时 ScanWifi_toast 不显示。我尝试将 toast 的上下文更改为 ScanWifi.this 或 getApplicationContext() 但它似乎不起作用。我没有收到任何编译错误。请帮忙

【问题讨论】:

  • R.string.ScanWifi_toast更改为getResource().getString(R.string.ScanWifi_toast)
  • 总是尝试在 String.xml 中用小写而不是大写来定义名称 更详细的检查:developer.android.com/guide/topics/resources/…
  • 尽管到目前为止所有的答案,有一个Toast.makeText() 的重载,它接受一个字符串资源ID,它工作正常。问题出在其他地方。考虑在您的代码中添加日志记录或调试器断点,以首先确认它已运行,如果没有,请找出它未运行的原因。
  • @laalto :是的,我已经尝试了这些建议,但我仍然没有看到吐司。我会尝试你的建议。
  • 查看这两个文件,我看到您说它在执行 Toast.makeText(BlockIdActivity.this 时有效,但在执行 Toast.makeText(getBaseContext() 时失败。这是提示吗?您的 LogCat 中是否收到错误消息?

标签: android android-toast


【解决方案1】:

我认为你的字符串文件有问题。像其他方式一样:

Toast.makeText(ScanWifi.this,getResource().getString(R.string.string.ScanWifi_toast),Toast.LENGTH_SHORT).show();

【讨论】:

    【解决方案2】:

    您的ScanWifi 活动代码未运行。因此,点击侦听器未注册到屏幕上的按钮,因此看不到 toast。

    由于您的两个活动都使用相同的内容视图布局,您可能应该将findViewById()setOnClickListener() 移动到主活动。

    要启动其他活动,请使用Intent,例如

    startActivity(new Intent(context, ActivityName.class));
    

    【讨论】:

    • 如果我将 findViewById() 和 setOnClickListener() 移动到主活动,那么 ScanWifi.java 类的大部分代码都会移动到主活动文件?在那种情况下,我可以只创建另一个按钮以及已经存在的 2 个按钮,并用它实现相同的逻辑。我将 findViewById() 和 setOnClickListener() 放在单独的 ScanWifi.java 类中的原因是为了让所有小部件分开,因为未来 scanwifi 会变得更加复杂。我现在只需要它在 ScanWifi.java 中工作吗?你能告诉我如何开始 ScanWifi 活动吗?
    • 如果你想要另一个布局的另一个活动,你可以做到,只需在setContentView()中使用另一个布局名称。使用startActivity()ScanWifi.class 启动它。
    • 我实际上想对 ScanWifi.class 使用相同的布局。是否可以像我最初尝试的那样使用相同的布局但为 blockidactivity 和 scanwifi 活动启动不同的活动?
    【解决方案3】:

    应该是:

    Toast.makeText(getBaseContext(),getResource().getString(R.string.ScanWifi_toast), Toast.LENGTH_SHORT).show();
    

    因为R.string.ScanWifi_toast 不会自动返回您在XML 中输入的String,它只返回id

    【讨论】:

      【解决方案4】:

      您应该使用getString(R.string.ScanWifi_toast) 代替直接使用R.string.ScanWifi_toast

      【讨论】:

        【解决方案5】:

        将此用于Toast 消息

        Toast.makeText(getBaseContext(),
                            getResource().getString(R.string.ScanWifi_toast),
                            Toast.LENGTH_SHORT).show();
        

        【讨论】:

          【解决方案6】:

          试试这个

          Toast.makeText(context, context.getString(R.string.ScanWifi_toast), Toast.LENGTH_LONG).show();
          

          【讨论】:

            【解决方案7】:

            你可以用这个

            Toast.makeText(getBaseContext(),"xyz",Toast.LENGTH_SHORT).show();
            

            Toast.makeText(Activity.this,string,Toast.LENGTH_SHORT).show();
            

            【讨论】:

            • 您可以直接将 Ur String Values 放入 side toast ... 或在 Toast 中使用之后在 String 中分配该值...
            猜你喜欢
            • 2015-01-26
            • 2021-09-06
            • 1970-01-01
            • 1970-01-01
            • 2021-10-06
            • 2022-08-18
            • 1970-01-01
            • 1970-01-01
            • 2014-06-28
            相关资源
            最近更新 更多