2014-10-29 88 views
0

我似乎无法从我的Button开始一个新的Activity,我在这里搜索的答案,但似乎无法解决问题。我希望有人有一个简单的解决方案。提前致谢。按钮onClick错误...找不到方法

以下是错误:

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); 
    } 
} 
+0

您的StartSearch.class活动在哪里? – 2014-10-29 13:18:36

+1

那么会发生什么?错误,例外,日志? – Yazan 2014-10-29 13:19:47

+0

它看起来正确... – 2014-10-29 13:21:01

回答

5

的问题是在你的方法签名

public void openSearch(){ 

它应该有一个,也是唯一一个PARAM,这是一个View

将其更改为

public void openSearch(View v){ 

v显然可以是你希望它是什么,但你应该让有意义的东西像vview,等...

From the Docs

In order for this to work, the method must be public and accept a View as its only parameter.

See this answer有关添加Buttons和的更详细说明

+0

谢谢你的回答。 – 2014-10-29 13:34:17

1

首先作个参考,以您的按钮

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" 
+0

你为什么会这么建议?一切都很好,OP的方式除了缺少方法参数 – codeMagic 2014-10-29 13:26:01

+0

@codeMagic - 你的回答非常好,我也有+1我的意图建议这是知道onClick监听器的实现 – 2014-10-29 13:28:25

+1

我我并不关心+1,关键是你听起来好像OP在做这件事的方式做错了。我一直用'onClick'看到这个。我认为我们不应该以另一种方式告诉OP,而不必解释什么是错误的。这很混乱。 – codeMagic 2014-10-29 13:30:32