找不到相应的方法处理程序 - Android XML

时间:2017-12-12 10:38:45

标签: android android-layout

在创建对现有项目的XML进行更改时,我遇到了此错误。这就是我的XML看起来像

activity_month_view.xml

<android.support.design.widget.CoordinatorLayout
    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:layout_width="match_parent"
    android:layout_height="match_parent"
    tools:context=".activities.YearViewActivity">

    <ImageView
        android:id="@+id/month_view_prev_month"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:src="@drawable/ic_keyboard_arrow_left_black_24dp"
        android:onClick="changeMonth"/>

</android.support.design.widget.CoordinatorLayout>

我的Java类

MonthViewActivity.java

public class MonthViewActivity extends AppCompatActivity {

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

    public void changeMonth(View view) {
        //Some methods here
    }

}

onClick属性显示此错误

 Corresponding method handler 'public void changeMonth(android.view.View)' not found

我查看了thisthis,但他们没有帮助。

3 个答案:

答案 0 :(得分:10)

我在声明XML中的上下文时犯了一个错误。我曾使用.activities.YearViewActivity,但changeMonth方法在另一个活动中声明,导致错误。

<android.support.design.widget.CoordinatorLayout
    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:layout_width="match_parent"
    android:layout_height="match_parent"
    tools:context=".activities.MonthViewActivity"> //Changed here

    <ImageView
        android:id="@+id/month_view_prev_month"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:src="@drawable/ic_keyboard_arrow_left_black_24dp"
        android:onClick="changeMonth"/>

</android.support.design.widget.CoordinatorLayout>

tools:context更改为调用活动的类为我修复了错误。

答案 1 :(得分:1)

您可以尝试这个来解决问题

.MainActivity

中的XML
 <TextView
    android:id="@+id/numbers"
    style="@style/CategoryStyle"
    android:layout_width="match_parent"
    android:layout_height="wrap_content"
    android:background="@color/category_numbers"
    android:text="@string/category_numbers"
    android:onClick="openNumberList"/>

Java代码

public class MainActivity extends AppCompatActivity {

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

    public void openNumberList(View view) {
        Intent i = new Intent(this, NumberActivity.class);
        startActivity(i);
    }
}

在MainActivity中声明一个名为openNumberList的方法。您无需在NumberActitvity

中定义它

答案 2 :(得分:0)

好的,这是一个简单的陷阱 :D & 我是 Kotlin/AS 新手。

我们需要在另一个函数之外定义我们的方法。如下图

例如:

//另一个函数

class MainActivity : AppCompatActivity() {      
override fun onCreate(savedInstanceState: Bundle?) {
    super.onCreate(savedInstanceState)
    setContentView(R.layout.activity_main)
    
}

//我的函数

fun show_toast_msg(view:View) {   

    Toast.makeText(getApplicationContext(), "Im focused.", Toast.LENGTH_SHORT).show();

}

哈哈太傻了,看看这是否有帮助