【问题标题】:OnClickListener in Android StudioAndroid Studio 中的 OnClickListener
【发布时间】:2013-06-04 20:41:56
【问题描述】:

我正在尝试使用新的 Android Studio 进行开发和应用,但我的 OnClickListeners 不断收到重大错误。主要是告诉我它无法解析符号“setOnClickListener”,也无法解析“View v”

package com.sigmachi.derbydays;

import android.app.Activity;
import android.content.Intent;
import android.os.Bundle;
import android.view.Menu;
import android.view.View;
import android.view.View.OnClickListener;
import android.widget.Button;

public class MainActivity extends Activity {

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


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

    Button button= (Button) findViewById(R.id.standingsButton);
    button.setOnClickListener(new View.OnClickListener() {
        public void onClick(View v) {
            startActivity(new Intent(MainActivity.this,StandingsActivity.class));
        }
    });

那是类中的代码

Information:Compilation completed with 11 errors and 0 warnings in 4 sec
Information:11 errors
Information:0 warnings
/Users/angelo/AndroidStudioProjects/SigmaChiDerbyDaysProject/SigmaChiDerbyDays/src/main/java/com/sigmachi/derbydays/MainActivity.java
    Error:Error:line (28)Gradle: <identifier> expected
    Error:Error:line (28)Gradle: illegal start of type
    Error:Error:line (28)Gradle: ')' expected
    Error:Error:line (28)Gradle: ';' expected
    Error:Error:line (28)Gradle: invalid method declaration; return type required
    Error:Error:line (30)Gradle: illegal start of type
    Error:Error:line (30)Gradle: ';' expected
    Error:Error:line (30)Gradle: ')' expected
    Error:Error:line (30)Gradle: not a statement
    Error:Error:line (30)Gradle: ';' expected
    Error:Error:line (33)Gradle: illegal start of type

这些是我收到的完全没有意义的错误。第 28 行从我做button.setOnClickListener时开始

编辑:现在当我按下按钮时,我会收到强制关闭

这是它应该打开的类,一个裸类,唯一的变化是要打开的布局

package com.sigmachi.derbydays;

import android.os.Bundle;
import android.app.Activity;
import android.view.Menu;

public class StandingsActivity extends Activity {

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


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

}

【问题讨论】:

  • 确保你已经在 AndroidManifest.xml 中声明了StandingsActivityActivity ?

标签: java android


【解决方案1】:
Button button= (Button) findViewById(R.id.standingsButton);
button.setOnClickListener(new View.OnClickListener() {
    public void onClick(View v) {
        startActivity(new Intent(MainActivity.this,StandingsActivity.class));
    }
});

此代码不在任何方法中。如果你想使用它,它必须在OnCreate()之类的方法中

protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_main);

    Button button= (Button) findViewById(R.id.standingsButton);
    button.setOnClickListener(new View.OnClickListener() {
        public void onClick(View v) {
            startActivity(new Intent(MainActivity.this,StandingsActivity.class));
        }
    });
}

【讨论】:

    【解决方案2】:

    您将需要在方法内按按钮初始化,而不是尝试在类级别初始化视图:

     Button button;  //<< declare here..
    
       @Override
        protected void onCreate(Bundle savedInstanceState) {
            super.onCreate(savedInstanceState);
            setContentView(R.layout.activity_main);
            button= (Button) findViewById(R.id.standingsButton); //<< initialize here
             // set OnClickListener for Button here
            button.setOnClickListener(new View.OnClickListener() {
            public void onClick(View v) {
                startActivity(new Intent(MainActivity.this,StandingsActivity.class));
            }
          });
        }
    

    【讨论】:

      【解决方案3】:

      这对我有用:

      protected void onCreate(Bundle savedInstanceState) {
          super.onCreate(savedInstanceState);
          setContentView(R.layout.activity_newarea);
      
          btnSave = (Button)findViewById(R.id.btnSave);
      
          OnClickListener btnListener = new OnClickListener() {
              @Override
              public void onClick(android.view.View view) {
                  finish();
              }
          };
          btnSave.setOnClickListener(btnListener);
      
      }
      

      【讨论】:

        【解决方案4】:
        protected void onCreate(Bundle savedInstanceState) {
           super.onCreate(savedInstanceState);
        
            setContentView(R.layout.activity_my);
            titolorecuperato = (TextView) findViewById(R.id.textView);
            String stitolo = titolorecuperato.getText().toString();
        
            Button btnHome = (Button) findViewById(R.id.button);
        
            btnHome.setOnClickListener(new View.OnClickListener() {
        
               @Override
                public void onClick(View view) {
        
               }
        });
        

        和 Nic007 之前说的一样。

        您确实需要在“onCreate”方法中编写代码。也对不起我的缩进...(这里的第一条评论)

        【讨论】:

          【解决方案5】:
          @Override
              public boolean onCreateOptionsMenu(Menu menu) {
                  // Inflate the menu; this adds items to the action bar if it is present.
                  getMenuInflater().inflate(R.menu.main, menu);
                  return true;
              }
          
           @Override
              public boolean onOptionsItemSelected(MenuItem item) {
                   int id = item.getItemId();
                   if (id == R.id.standingsButton) {
                      startActivity(new Intent(MainActivity.this,StandingsActivity.class));
                      return true;
                  }
                  return super.onOptionsItemSelected(item);
              }
          

          【讨论】:

          • 你能解释一下这段代码是如何工作的吗,以及在你的答案中格式化你的代码(使用四个空格)。
          猜你喜欢
          • 2016-04-20
          • 1970-01-01
          • 2021-03-17
          • 1970-01-01
          • 2022-11-25
          • 2019-02-08
          • 2017-09-01
          • 2017-06-15
          • 1970-01-01
          相关资源
          最近更新 更多