【问题标题】:Button click event error for toast on android studioandroid studio上toast的按钮单击事件错误
【发布时间】:2014-12-11 10:55:15
【问题描述】:

此代码无法在 Android Studio 上运行。我只是希望它在单击按钮时显示吐司。请帮忙。下面附上代码:

我是 android 开发的新手,很难弄清楚这一点。我认为问题是一个愚蠢的语法错误或未定义的变量。另外,我如何定义“v”?

package com.shutter2000.www.shutter_2000_oms;    
import android.app.Activity;
import android.content.Context;
import android.os.Bundle;
import android.view.Menu;
import android.view.MenuItem;
import android.view.View;
import android.widget.ArrayAdapter;
import android.widget.Button;
import android.widget.EditText;
import android.widget.Spinner;
import android.widget.Toast;
import android.view.View.OnClickListener;    


public class SiteVisitDetails extends Activity {

public EditText mCusName;
public EditText mOrderID;
public EditText mProjectID;
public EditText mHeightWidth;
public EditText mNote;
public Button mSubmitButton;


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

    //initialize text fields
    mCusName = (EditText) findViewById(R.id.txtCusName);
    mOrderID = (EditText) findViewById(R.id.txtOrderID);
    mProjectID = (EditText) findViewById(R.id.txtProjectID);
    mHeightWidth = (EditText) findViewById(R.id.txtHeightWidth);
    mNote = (EditText) findViewById(R.id.txtNote);
    mSubmitButton = (Button) findViewById(R.id.btnSubmit);

    //listen to submit button click event

    mSubmitButton.OnClickListener(new View.OnClickListener())
    {

        @Override
        public void onClick(View v){


        if (v == mSubmitButton) {
            Context context = getApplicationContext();
            CharSequence text = "Successfully Sent!";
            int duration = Toast.LENGTH_LONG;
            final Toast tost = Toast.makeText(context, text, duration);
            tost.show();
        }
    }
    }
}

@Override
public boolean onCreateOptionsMenu(Menu menu) {
    // Inflate the menu; this adds items to the action bar if it is present.
    getMenuInflater().inflate(R.menu.site_visit_details, menu);
    return true;
}

public void addItemsToProductSpinner() {
    Spinner spinner = (Spinner) findViewById(R.id.spnProducts);
    // Create an ArrayAdapter using the string array and a default spinner layout
    ArrayAdapter<CharSequence> adapter = ArrayAdapter.createFromResource(this,
            R.array.products, android.R.layout.simple_spinner_item);
    // Specify the layout to use when the list of choices appears
    android.R.layout.simple_spinner_item
    // Apply the adapter to the spinner
    spinner.setAdapter(adapter);
}

@Override
public boolean onOptionsItemSelected(MenuItem item) {
    // Handle action bar item clicks here. The action bar will
    // automatically handle clicks on the Home/Up button, so long
    // as you specify a parent activity in AndroidManifest.xml.
    int id = item.getItemId();
    if (id == R.id.action_settings) {
        return true;
    }
    return super.onOptionsItemSelected(item);
}
}    

错误是:

“mSubmitButton...”的错误

Expected class or package
'OnClickListener' is abstract;cannot be instantiated

“@override public void onClick(View v){...”的错误

Annotations are not allowed here
Identifier or type expected

“public void addItemsToProductSpinner()...”的错误

";" expected
Cannot resolve symbol "v"
unexpected token

【问题讨论】:

    标签: java android


    【解决方案1】:
    package com.shutter2000.www.shutter_2000_oms;    
    import android.app.Activity;
    import android.content.Context;
    import android.os.Bundle;
    import android.view.Menu;
    import android.view.MenuItem;
    import android.view.View;
    import android.widget.ArrayAdapter;
    import android.widget.Button;
    import android.widget.EditText;
    import android.widget.Spinner;
    import android.widget.Toast;
    import android.view.View.OnClickListener;    
    
    
    public class SiteVisitDetails extends Activity implements OnClickListener{
    
    public EditText mCusName;
    public EditText mOrderID;
    public EditText mProjectID;
    public EditText mHeightWidth;
    public EditText mNote;
    public Button mSubmitButton;
    
    
    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_site_visit_details);
    
        //initialize text fields
        mCusName = (EditText) findViewById(R.id.txtCusName);
        mOrderID = (EditText) findViewById(R.id.txtOrderID);
        mProjectID = (EditText) findViewById(R.id.txtProjectID);
        mHeightWidth = (EditText) findViewById(R.id.txtHeightWidth);
        mNote = (EditText) findViewById(R.id.txtNote);
        mSubmitButton = (Button) findViewById(R.id.btnSubmit);
    
        //listen to submit button click event
    
        mSubmitButton.setOnClickListener(this);
    
    }
    
    @Override
    public void onClick(View v) {
         if (v.getId() == R.id.mSubmitButton) {
             Toast.makeText(this,"Successfully sent!",Toast.LENGTH_LONG).show();             
         }
    
    }
    
    @Override
    public boolean onCreateOptionsMenu(Menu menu) {
        // Inflate the menu; this adds items to the action bar if it is present.
        getMenuInflater().inflate(R.menu.site_visit_details, menu);
        return true;
    }
    
    public void addItemsToProductSpinner() {
        Spinner spinner = (Spinner) findViewById(R.id.spnProducts);
        // Create an ArrayAdapter using the string array and a default spinner layout
        ArrayAdapter<CharSequence> adapter = ArrayAdapter.createFromResource(this,
                R.array.products, android.R.layout.simple_spinner_item);
        // Specify the layout to use when the list of choices appears
        android.R.layout.simple_spinner_item
        // Apply the adapter to the spinner
        spinner.setAdapter(adapter);
    }
    
    @Override
    public boolean onOptionsItemSelected(MenuItem item) {
        // Handle action bar item clicks here. The action bar will
        // automatically handle clicks on the Home/Up button, so long
        // as you specify a parent activity in AndroidManifest.xml.
        int id = item.getItemId();
        if (id == R.id.action_settings) {
            return true;
        }
        return super.onOptionsItemSelected(item);
    }
    }  
    

    【讨论】:

    • 您应该在 xml 文件中提及您的按钮的 ID。例如,如果您在 xml 文件中的按钮 id 是 btn_submit。那么你必须检查 v.getId()==R.id.btn_submit
    • 是的,我的错误,它应该是大写的,即 LENGTH_LONG
    【解决方案2】:

    错了v == mSubmitButton 在 java 中,只能用 operator == 来等于原始类型。对于对象,您需要使用 equals() 方法。 替换:

    mSubmitButton.onClickListener(new View.OnClickListener())
        {
    
            @Override
            public void onClick(View v){
    
    
            if (v.getId() == R.id.btnSubmit) {
                Context context = getApplicationContext();
                CharSequence text = "Successfully Sent!";
                int duration = Toast.LENGTH_LONG;
                final Toast tost = Toast.makeText(context, text, duration);
                tost.show();
            }
        }
        }
    

    【讨论】:

      【解决方案3】:

      单击按钮时显示吐司。

          mSubmitButton = (Button) findViewById(R.id.btnSubmit);
          mSubmitButton.setOnClickListener(new View.OnClickListener() {
              @Override
              public void onClick(View v) {
      
                  //SiteVisitDetails
                  Toast tea = Toast.makeText(getApplicationContext(), "Send", Toast.LENGTH_LONG);
                  tea.show();
      
              }
          });
      

      【讨论】:

        【解决方案4】:
        mSubmitButton.setOnClickListener(new View.OnClickListener())
        {
            @Override
            public void onClick(View v){
                CharSequence text = "Successfully Sent!";
                int duration = Toast.LENGTH_LONG;
                Toast tost = Toast.makeText(SiteVisitDetails.this, text, duration);
                tost.show();
            }
        
        });
        

        使用这个。无需检查if(v.getId() == R.id.btnSubmit)。因为您正在为已经初始化的按钮设置点击操作。

        【讨论】:

        • 感谢您的回复:)
        【解决方案5】:

        您的语法中有错误的括号,缺少; 和拼写错误的setOnClickListener 方法名称。

        改变

        mSubmitButton.OnClickListener(new View.OnClickListener())
            {
            // ...
            }
        

        mSubmitButton.setOnClickListener(new View.OnClickListener()
            {
            // ...
            });
        

        【讨论】:

          【解决方案6】:

          将“this”替换为 getApplicationContext()

          @Override
          public void onClick(View v) {
           if (v.getId() == R.id.mSubmitButton) {
               Toast.makeText(getApplicationContext(),"Successfully sent!",Toast.Length_LONG).show();             
           }
          
          }
          

          【讨论】:

          • 这给出了错误:“OnClickListener”是抽象的;无法实例化
          • setOnClickListner 也是使用工作室智能的抽象函数。我希望这种方法也能存在。
          • @Override public void onClick(View v) { Toast.makeText(getApplicationContext(),"发送成功!",Toast.Length_LONG).show(); } }
          【解决方案7】:
           mSubmitButton.OnClickListener(
          

          应该是

          mSubmitButton.setOnClickListener(
          

          编辑。 setOnClickListener 方法需要一个实现View.OnClickListener 接口的对象:

          mSubmitButton.setOnClickListener(new View.OnClickListener() {
          
              @Override
              public void onClick(View v){
                  Context context = getApplicationContext();
                  CharSequence text = "Successfully Sent!";
                  int duration = Toast.LENGTH_LONG;
                  final Toast tost = Toast.makeText(context, text, duration);
                  tost.show();
              }
          });
          

          【讨论】:

          • 两者的结果相同。
          【解决方案8】:

          您应该使用 setter 来设置 onclickListener。 而且由于您使用的是新的 onclicklistener 并且您只是为您的按钮设置它,您不需要检查是否 v==mSubmitButton 因为它是唯一的选择:)

          mSubmitButton.setOnClickListener(new View.OnClickListener())
              {
          
                  @Override
                  public void onClick(View v){
          
                      Context context = getApplicationContext();
                      CharSequence text = "Successfully Sent!";
                      int duration = Toast.LENGTH_LONG;
                      final Toast tost = Toast.makeText(context, text, duration);
                      tost.show();
          
              }
          

          【讨论】:

          • 很高兴听到它解决了您的问题 :)
          【解决方案9】:

          我认为你不需要检查

           @Override
              public void onClick(View v){
          
           //Don't need to check condition control come here only v.getId() == R.id.btnSubmit 
             //  if (v == mSubmitButton) { 
          
                  Context context = getApplicationContext();
                  CharSequence text = "Successfully Sent!";
                  int duration = Toast.LENGTH_LONG;
                  final Toast tost = Toast.makeText(context, text, duration);
                  tost.show();
              //}
          }
          

          【讨论】:

          • 感谢您的回复:)
          【解决方案10】:

          试试下面的代码:

          if(v.getId() == R.id.btnSubmit){
               Toast.makeText(SiteVisitDetails.this,"Successfully Sent!",Toast.LENGTH_LONG).show();
          }
          

          【讨论】:

            猜你喜欢
            • 2013-05-14
            • 1970-01-01
            • 1970-01-01
            • 2018-12-21
            • 1970-01-01
            • 2023-04-08
            • 2012-01-25
            • 1970-01-01
            • 1970-01-01
            相关资源
            最近更新 更多