2016-12-14 3 views
1

이 botton에 문제가 있습니다. 응용 프로그램을 클릭하면 "ImageButton has stopped"이라는 메시지가 전송됩니다. 나는 그것이 바보 같은 것이라고 생각하지만 코딩을 시작했습니다. 내 코드에 대한 자세한 내용은 다음과 같습니다.Android에서 내 OnClick 메서드를 찾을 수 없습니다.

로그 캣 :

12-13 21:01:56.659 1075-1075/com.example.christian.imagebutton E/AndroidRuntime: FATAL EXCEPTION: main 
                      Process: com.example.christian.imagebutton, PID: 1075 
                      java.lang.IllegalStateException: Could not find method llamar(MainActivity)(View) in a parent or ancestor Context for android:onClick attribute defined on view class android.support.v7.widget.AppCompatImageButton with id 'boton1' 
                       at android.support.v7.app.AppCompatViewInflater$DeclaredOnClickListener.resolveMethod(AppCompatViewInflater.java:327) 
                       at android.support.v7.app.AppCompatViewInflater$DeclaredOnClickListener.onClick(AppCompatViewInflater.java:284) 
                       at android.view.View.performClick(View.java:5637) 
                       at android.view.View$PerformClick.run(View.java:22429) 
                       at android.os.Handler.handleCallback(Handler.java:751) 
                       at android.os.Handler.dispatchMessage(Handler.java:95) 
                       at android.os.Looper.loop(Looper.java:154) 
                       at android.app.ActivityThread.main(ActivityThread.java:6119) 
                       at java.lang.reflect.Method.invoke(Native Method) 
                       at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:886) 
                       at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:776) 

주요 활동

package com.example.christian.imagebutton; 

import android.support.v7.app.AppCompatActivity; 
import android.os.Bundle; 
import android.view.View; 
import android.widget.TextView; 

public class MainActivity extends AppCompatActivity { 
    private TextView tv1; 

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

    tv1=(TextView)findViewById(R.id.tv1); 

} 
public void llamar(View view){ 
    tv1.setText("Llamando"); 
    } 
} 

그리고 레이아웃은 다음과 같습니다

<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android" 
xmlns:app="http://schemas.android.com/apk/res-auto" 
xmlns:tools="http://schemas.android.com/tools" 
android:id="@+id/activity_main" 
android:layout_width="match_parent" 
android:layout_height="match_parent" 
android:paddingBottom="@dimen/activity_vertical_margin" 
android:paddingLeft="@dimen/activity_horizontal_margin" 
android:paddingRight="@dimen/activity_horizontal_margin" 
android:paddingTop="@dimen/activity_vertical_margin" 
tools:context="com.example.christian.imagebutton.MainActivity"> 

<ImageButton 
    android:layout_width="wrap_content" 
    android:layout_height="wrap_content" 
    app:srcCompat="@mipmap/telefono" 
    android:layout_alignParentTop="true" 
    android:layout_alignParentLeft="true" 
    android:layout_alignParentStart="true" 
    android:id="@+id/boton1" 
    android:onClick="llamar(MainActivity)" /> 

<TextView 
    android:text="TextView" 
    android:layout_width="wrap_content" 
    android:layout_height="wrap_content" 
    android:layout_below="@+id/boton1" 
    android:layout_alignParentLeft="true" 
    android:layout_alignParentStart="true" 
    android:layout_marginTop="22dp" 
    android:id="@+id/tv1" /> 
</RelativeLayout> 
+1

충돌에서 스택 트레이스를 게시해야합니다. 하지만 가장 가능성이 메서드 이름은 XML 레이아웃 파일에서 (분명히) 이름이 일치하지 않습니다. – codeMagic

+0

android : onClick = "llamar (MainActivity) llamar에게 chill this –

+0

오, 작동합니다, 아주 많이 : D보다 – Nemeium

답변

0

android:onClick="someMethod" 속성을 정의하면 Android에서 방금 OnClickListener을 구현합니다.

두 코드 스 니펫은 완전히 동일하지만 두 가지 다른 방식으로 구현되었습니다.

코드 구현

Button btn = (Button) findViewById(R.id.mybutton); 

btn.setOnClickListener(new View.OnClickListener() { 
    @Override 
    public void onClick(View v) { 
     llamar(v); 
    } 
}); 

// some more code 

public void llamar(View v) { 
    // does something very interesting 
} 

위는 OnClickListener의 코드 구현입니다. 그리고 이제 XML 구현.

<?xml version="1.0" encoding="utf-8"?> 
<!-- layout elements --> 
<Button android:id="@+id/mybutton" 
    android:layout_width="wrap_content" 
    android:layout_height="wrap_content" 
    android:text="Click me!" 
    android:onClick="llamar" /> 
<!-- even more layout elements --> 

XML 구현은 이제 백그라운드에서 안드로이드는 클릭 이벤트에 대한 당신의 메소드를 호출하는 자바 코드보다 아무 것도하지 않습니다.

위의 XML에서 Android는 현재 활동에서만 onClick 메소드 llamar()을 찾습니다. 조각을 사용하여 위의 XML을 추가하더라도 이 아닌은 XML을 추가하는 데 사용 된 조각의 .java 파일에서 메서드를 찾습니다. 따라서 fragments을 사용하는 경우 중요합니다.

0
android:onClick="llamar" 

은 이렇게해야하지?

관련 문제