Tôi gặp sự cố trong đó Nút của tôi (id i_am_a_problem
) được khai báo trong XML bố cục của đoạn, tạo ra lỗi khi nút được nhấp. Android cố gắng gọi phương thức onClick public void calculate(View v)
nhưng không thể tìm thấy nó (mặc dù nó được khai báo trong MainActivity). Chi tiết mã của tôi bên dưới và lỗi sau đó. Vui lòng giúp tôi xác định lý do android không thể tìm thấy phương thức onClick. Cảm ơn.Android không thể tìm thấy phương thức onClick của tôi
Có thực sự là không bất cứ điều gì khác đang xảy ra trong mã này (dự án mới mẻ)
MainActivity.java
package supercali.FRAG.alistic;
import android.support.v7.app.AppCompatActivity;
import android.os.Bundle;
import android.view.Menu;
import android.view.MenuItem;
import android.view.View;
import android.widget.TextView;
public class MainActivity extends AppCompatActivity {
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
}
@Override
public boolean onCreateOptionsMenu(Menu menu) { /*snip - irrelevance*/ }
@Override
public boolean onOptionsItemSelected(MenuItem item) { /*snip - irrelevance*/ }
public void calculcate(View v){
TextView tv = (TextView)findViewById(R.id.results);
tv.setText(calculate_value());
}
private String calculate_value(){
return "Abra Kadabra";
}
}
bố trí MainActivity của chỉ chứa một đoạn
<fragment
xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:tools="http://schemas.android.com/tools"
android:id="@+id/fragment"
android:name="supercali.FRAG.alistic.MainActivityFragment"
tools:layout="@layout/fragment_main"
android:layout_width="match_parent"
android:layout_height="match_parent" />
Và cách bố trí cho Fragment đó là:
<LinearLayout
xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:tools="http://schemas.android.com/tools"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:paddingLeft="@dimen/activity_horizontal_margin"
android:paddingRight="@dimen/activity_horizontal_margin"
android:paddingTop="@dimen/activity_vertical_margin"
android:paddingBottom="@dimen/activity_vertical_margin"
tools:context=".MainActivityFragment">
<Button
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="@string/calculate"
android:onClick="calculate"
android:id="@+id/i_am_a_problem"/>
<TextView android:text="@string/results_pending" android:layout_width="wrap_content"
android:layout_height="wrap_content" android:id="@+id/results"/>
</LinearLayout>
Vấn đề Nút chỉ là có ^^ với id i_am_a_problem
LogCat:
06-18 09:49:41.280 31642-31642/supercali.FRAG.alistic E/AndroidRuntime﹕ FATAL EXCEPTION: main
Process: supercali.FRAG.alistic, PID: 31642
java.lang.IllegalStateException: Could not find method calculate(View) in a parent or ancestor Context for android:onClick attribute defined on view class android.support.v7.widget.AppCompatButton
at android.view.View$DeclaredOnClickListener.resolveMethod(View.java:4441)
at android.view.View$DeclaredOnClickListener.onClick(View.java:4405)
at android.view.View.performClick(View.java:5147)
at android.view.View$PerformClick.run(View.java:21069)
at android.os.Handler.handleCallback(Handler.java:739)
at android.os.Handler.dispatchMessage(Handler.java:95)
at android.os.Looper.loop(Looper.java:148)
at android.app.ActivityThread.main(ActivityThread.java:5401)
at java.lang.reflect.Method.invoke(Native Method)
at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:725)
at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:615)
Có thể thực tế là nó nằm trong 'FrameLayout' là vấn đề. Dù sao, cố gắng tránh XML 'onClick', và làm điều đó bằng mã với' setOnClickListener() 'và xem nếu nó hoạt động. – shkschneider