【问题标题】:Button onClick error...Could not find a method按钮 onClick 错误...找不到方法
【发布时间】:2014-12-25 05:17:25
【问题描述】:

我似乎无法从我的Button 开始新的Activity,我已在此处搜索答案,但似乎无法解决问题。我希望有人有一个简单的解决方案。提前致谢。

这是错误:

E/AndroidRuntime﹕ FATAL EXCEPTION: main
java.lang.IllegalStateException: Could not find a method openSearch(View) in the 
activity class dk.mathias.splitcab.MainActivity 
for onClick handler on view class android.widget.Button with id 'btnStartSearch'

MainActivity.java

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

}

public void openSearch(){
    Intent openSearchIntent = new Intent(MainActivity.this, StartSearch.class);
    startActivity(openSearchIntent);
}

AndroidManifest.xml

    <activity
        android:name=".StartSearch"
        android:label="@string/title_activity_start_search" >
        <intent-filter>
            <action android:name="dk.mathias.splitcab.STARTSEARCH" />

            <category android:name="android.intent.category.DEFAULT" />
        </intent-filter>
    </activity>

activity_main.xml

<Button
    android:layout_width="wrap_content"
    android:layout_height="wrap_content"
    android:text="@string/StartSearch"
    android:id="@+id/btnStartSearch"
    android:layout_alignParentBottom="true"
    android:layout_alignParentLeft="true"
    android:layout_alignParentStart="true"
    android:layout_alignRight="@+id/tvWelcome"
    android:layout_alignEnd="@+id/tvWelcome"
    android:onClick="openSearch"

    />

StartSearch.java

public class StartSearch extends Activity {

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

【问题讨论】:

  • 您的 StartSearch.class 活动在哪里?
  • 那么会发生什么?错误、异常、日志?
  • 看起来差不多...

标签: java android android-activity buttonclick


【解决方案1】:

问题在于您的方法签名

public void openSearch(){

它应该只有一个参数,即View

改成

public void openSearch(View v){

v 显然可以是你想要的任何东西,但你应该让它变得有意义,比如vview 等......

From the Docs

为了使其工作,该方法必须是公共的并接受一个视图作为它的唯一参数。

See this answer 更详细的说明添加ButtonsOnClick

【讨论】:

    【解决方案2】:

    首先引用您的按钮

        search = (Button) findViewById(R.id.btnStartSearch);
    

    然后为按钮实现 onClick 监听器,如下所示

            search.setOnClickListener(new OnClickListener() {
    
            @Override
            public void onClick(View v) {
    
                 Intent openSearchIntent = new Intent(MainActivity.this, StartSearch.class);
                 startActivity(openSearchIntent)
            }
        });
    

    确保从 XML 文件中删除此行

     android:onClick="openSearch"
    

    【讨论】:

    • 你为什么会建议这个?除了缺少方法中的参数之外,OP 的执行方式一切都很好
    • @codeMagic - 你的回答非常好,我也有一个 +1 我的意图是要知道 onClick Listeners 的实现
    • 我不关心 +1,关键是你让它听起来像是 OP 的方式做错了。我一直在onClick 看到这一点。我认为我们不应该只用另一种方式告诉 OP 而不解释做错了什么。这令人困惑。
    • 我选择了另一个答案以获得最佳答案,因为它是最简单的解决方法。我确信您的解决方案也有效,因此我给了它一个赞成票。感谢您的回复!
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-02-07
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多