Кнопка onClick errorНе удалось найти метод

Кажется, я не могу начать новый Activity с моего Button, я искал здесь ответы, но не могу решить проблему. Я надеюсь, что у кого-то есть простое решение. Заранее спасибо.

Вот ошибка:

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

person Matt Baech    schedule 29.10.2014    source источник
comment
Где ваша активность StartSearch.class?   -  person Remees M Syde    schedule 29.10.2014
comment
так что же происходит? ошибки, исключения, журналы?   -  person Yazan    schedule 29.10.2014
comment
Вроде правильно...   -  person Alex K    schedule 29.10.2014


Ответы (2)


Проблема в вашей подписи метода

public void openSearch(){

он должен иметь один и только один параметр, который является View.

Измените его на

public void openSearch(View v){

v, очевидно, может быть чем угодно, но вы должны сделать его чем-то осмысленным, например, v, view и т. д.

Из документации

Чтобы это работало, метод должен быть общедоступным и принимать представление в качестве единственного параметра.

см. этот ответ для более подробного описания добавления Buttons и OnClick

person codeMagic    schedule 29.10.2014
comment
Спасибо за ваш ответ. - person Matt Baech; 29.10.2014

Сначала сделайте ссылку на вашу кнопку

    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"
person Srikanth Pai    schedule 29.10.2014
comment
Почему вы предлагаете это? Все в порядке с тем, как это делает ОП, за исключением отсутствия параметра в методе. - person codeMagic; 29.10.2014
comment
@codeMagic - ваш ответ прекрасен, и у меня тоже есть +1. Мое намерение предложить это - узнать реализацию onClick Listeners - person Srikanth Pai; 29.10.2014
comment
Меня не волнует +1, дело в том, что вы делаете это так, как будто это делается неправильно из-за того, как это делает ОП. Я вижу это все время с onClick. Я не думаю, что мы должны просто сказать ОП по-другому, не объясняя, что делается неправильно. Это сбивает с толку. - person codeMagic; 29.10.2014
comment
Я выбрал другой ответ как лучший ответ, потому что это было самым простым решением. Я уверен, что ваше решение также работает, и поэтому я дал ему голос. Спасибо за ответ! - person Matt Baech; 29.10.2014