Tôi đang tạo ứng dụng có tên Ping trong Android Studio. Cho đến nay các hoạt động của tôi là LoginActivity ProfileActivity và Timeline. Vấn đề của tôi là một nút trong bố cục tương ứng với hoạt động Dòng thời gian có phương thức onClick không hoạt động. Khi nút được nhấp, trình giả lập cho "Unfortunatley, Ping đã dừng lại." Tôi đang xác định các nút và phương pháp onClick giống như cách tôi có cho các nút khác có chức năng đang hoạt động, chỉ có một nút này dường như không hoạt động. Tôi nhận được một lỗi nói rằng phương pháp này không thể được tìm thấy, nhưng tôi đã viết phương thức trong hoạt động tương ứng. Đây là logcat:java.lang.IllegalStateException: không thể tìm thấy phương thức onClick của nút trong Android Studio
04-30 10:40:08.727 2075-2075/com.ping_social.www.ping E/AndroidRuntime﹕ FATAL EXCEPTION: main
Process: com.ping_social.www.ping, PID: 2075
java.lang.IllegalStateException: Could not find a method onProfilePress(View) in the activity class android.view.ContextThemeWrapper for onClick handler on view class android.widget.Button with id 'profileButton'
at android.view.View$1.onClick(View.java:4007)
at android.view.View.performClick(View.java:4780)
at android.view.View$PerformClick.run(View.java:19866)
at android.os.Handler.handleCallback(Handler.java:739)
at android.os.Handler.dispatchMessage(Handler.java:95)
at android.os.Looper.loop(Looper.java:135)
at android.app.ActivityThread.main(ActivityThread.java:5257)
at java.lang.reflect.Method.invoke(Native Method)
at java.lang.reflect.Method.invoke(Method.java:372)
at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:903)
at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:698)
Caused by: java.lang.NoSuchMethodException: onProfilePress [class android.view.View]
at java.lang.Class.getMethod(Class.java:664)
at java.lang.Class.getMethod(Class.java:643)
at android.view.View$1.onClick(View.java:4000)
at android.view.View.performClick(View.java:4780)
at android.view.View$PerformClick.run(View.java:19866)
at android.os.Handler.handleCallback(Handler.java:739)
at android.os.Handler.dispatchMessage(Handler.java:95)
at android.os.Looper.loop(Looper.java:135)
at android.app.ActivityThread.main(ActivityThread.java:5257)
at java.lang.reflect.Method.invoke(Native Method)
at java.lang.reflect.Method.invoke(Method.java:372)
at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:903)
at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:698)
Đây là lớp hoạt động Timeline của tôi:
package com.ping_social.www.ping;
import android.content.Intent;
import android.support.v7.app.ActionBarActivity;
import android.os.Bundle;
import android.util.Log;
import android.view.Menu;
import android.view.MenuItem;
import android.view.View;
public class TimeLine extends ActionBarActivity {
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_time_line);
/*print log that shows we've got here*/
Log.i("LoginActivity", "Layout has been set");
}
@Override
public boolean onCreateOptionsMenu(Menu menu) {
// Inflate the menu; this adds items to the action bar if it is present.
getMenuInflater().inflate(R.menu.menu_time_line, menu);
return true;
}
@Override
public boolean onOptionsItemSelected(MenuItem item) {
// Handle action bar item clicks here. The action bar will
// automatically handle clicks on the Home/Up button, so long
// as you specify a parent activity in AndroidManifest.xml.
int id = item.getItemId();
//noinspection SimplifiableIfStatement
if (id == R.id.action_settings) {
return true;
}
return super.onOptionsItemSelected(item);
}
/*called when user presses the Log in button*/
public void onProfilePress(View view){
/*Log the button press*/
Log.i("TimeLine", "Has reached the onProfilePress method");
Intent intent = new Intent(this, ProfileActivity.class);
startActivity(intent);
}
}
Và đây là Timeline mã bố trí xml của tôi:
<RelativeLayout 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"
android:theme="@style/GeneralTheme"
tools:context="com.ping_social.www.ping.TimeLine">
<TextView android:text="@string/no_pings" android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:textSize="30sp"
android:layout_centerVertical="true"
android:layout_centerHorizontal="true"
android:textIsSelectable="false"
android:textColor="@color/PING_TOP_BAR_RED"
android:id="@+id/textView4" />
<LinearLayout
android:orientation="horizontal"
android:layout_width="fill_parent"
android:layout_height="60dp"
android:layout_alignParentBottom="true"
android:layout_centerHorizontal="true">
<Button
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="@string/timeline_button"
android:id="@+id/timelineButton"
android:textColor="@color/PING_TOP_BAR_RED"
android:layout_weight="1"/>
<Button
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="@string/new_ping_button"
android:id="@+id/newPingButton"
android:layout_weight="1"/>
<Button
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="@string/activity_button"
android:id="@+id/activityButton"
android:layout_weight="1"/>
<Button
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="@string/profile_button"
android:id="@+id/profileButton"
android:layout_weight="1"
android:onClick="onProfilePress"/>
</LinearLayout>
</RelativeLayout>
Tôi khá tích cực không có các vấn đề chính tả và cũng không có các nút khác chia sẻ cùng một ID hoặc các phương thức có cùng tên. Bị mắc kẹt về điều này trong một vài ngày, bất kỳ trợ giúp được đánh giá rất nhiều!
Tại sao bạn không đăng ký nó từ mã java 'Button.setOnClickListener (mới View.onClickListener'? –
Bạn có nhớ thử nghiệm nó không có dòng này không:" android: theme = "@ style/GeneralTheme" '? – AndroidEx
Vấn đề có vẻ là các trẻ em khác nhau của Hoạt động không đặt đúng thông tin quyền sở hữu của Chế độ xem, vì vậy nó sẽ tìm kiếm tùy chỉnh trong lớp cha mẹ chung android.view.ContextThemeWrapper thay vì trong lớp con Hoạt động tùy chỉnh nơi nó thực sự tồn tại –