【问题标题】:Corresponding method handler not found - Android XML未找到相应的方法处理程序 - Android XML
【发布时间】:2017-12-12 10:38:45
【问题描述】:

我在创建对现有项目的 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,但它们没有帮助。

【问题讨论】:

    标签: android android-layout


    【解决方案1】:

    我在 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 更改为调用活动的类为我修复了错误。

    【讨论】:

    • 如果您在 .java 文件中编写的方法未出现在设计窗口的 onClick 字段中,则应始终检查该 XML 文件中的 tools:context。这是非常重要的指针。谢谢
    【解决方案2】:

    你可以试试这个来解决问题

    .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中定义它

    【讨论】:

      【解决方案3】:

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

      例如:

      //另一个函数

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

      【讨论】:

        猜你喜欢
        • 2017-12-08
        • 2016-12-13
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多