【问题标题】:onClick method does not existonClick 方法不存在
【发布时间】:2018-04-20 12:17:10
【问题描述】:

(!)onClick 方法不存在

找不到对应的方法处理程序'public void navigate(android.view.View)' onClick 属性值应该是该视图上下文中的方法名称,以便在单击视图时调用。此名称必须对应于只采用一个 View 类型参数的公共方法。必须是字符串值,使用 '\;'为 unicode 字符转义字符,例如 '\n' 或 '\uxxxx'。

* 你好,我是新来的,我只是在 Coursera 上尝试课程,但它似乎已经过时了,而且有些东西不能正常工作。 我一直在尝试在论坛上搜索以找到答案,并且我尝试了几件事,但似乎我太弱智并且是新手。 可能与我的工具有关:上下文?

这是我的 xml:

<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:padding="16dp"
tools:context="MainActivity"
android:background="#ffffff">


<NumberPicker
    android:id="@+id/numberPicker"
    android:layout_width="wrap_content"
    android:layout_height="wrap_content"
    android:layout_alignParentTop="true"
    android:layout_alignParentLeft="true"
    android:layout_alignParentStart="true"
    />

<Button
    android:layout_width="wrap_content"
    android:layout_height="wrap_content"
    android:text="OK"
    android:id="@+id/button"
    android:layout_below="@+id/numberPicker"
    android:layout_alignParentLeft="true"
    android:layout_alignParentStart="true"
    android:onClick="navigate"/>

<WebView
    android:layout_width="wrap_content"
    android:layout_height="wrap_content"
    android:id="@+id/webView"
    android:layout_below="@+id/button"
    android:layout_alignParentLeft="true"
    android:layout_alignParentStart="true" />

这是我的 java:

import android.support.v7.app.AppCompatActivity;
import android.os.Bundle;
import android.webkit.WebView;
import android.webkit.WebViewClient;
import android.widget.NumberPicker;
import android.view.View;

public class MainActivity extends AppCompatActivity {

NumberPicker possibilities;
WebView webView;


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

    possibilities = (NumberPicker) findViewById(R.id.numberPicker);
    webView = (WebView) findViewById(R.id.webView);
    String[] possibilitiesStrings = {
            "Android",
            "Checklist text-input fields",
            "Coursera",
            "Supelec",
    };
    possibilities.setDisplayedValues(possibilitiesStrings);
    possibilities.setMinValue(0);
    possibilities.setMaxValue(possibilitiesStrings.length - 1);

    /**
     * called when the OK button from activity_main.xml is clicked
     * @param v the View which triggered the method call: the OK button
     */
    public void navigate(View v) {
    int choice = possibilities.getValue();
        webView.setWebViewClient(new WebViewClient());
    if (choice == 0)
        webView.loadUrl("file:///android_asset/android.html");
    else if (choice == 1)
    webView.loadUrl("file:///android_asset/checklist.html");
else if (choice == 2)
    webView.loadUrl("http:///www.coursera.org");
else if (choice == 3)
    webView.loadUrl("file:///android_asset/supelec.html");
}

}


}
}

【问题讨论】:

  • 老兄,这是一个很好的问题的绝佳例子,尤其是来自第一张海报。干得好!

标签: java xml android-studio


【解决方案1】:

我分析了您的代码,发现您在 onCreate() method 中声明了您的导航方法,这就是您可以从 xml 中找到它的原因。

示例如何在 xml 中使用声明方法

import android.support.v7.app.AppCompatActivity;
import android.os.Bundle;
import android.webkit.WebView;
import android.webkit.WebViewClient;
import android.widget.NumberPicker;
import android.view.View;

public class MainActivity extends AppCompatActivity {

    NumberPicker possibilities;
    WebView webView;


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

        possibilities = (NumberPicker) findViewById(R.id.numberPicker);
        webView = (WebView) findViewById(R.id.webView);
        String[] possibilitiesStrings = {
                "Android",
                "Checklist text-input fields",
                "Coursera",
                "Supelec",
        };
        possibilities.setDisplayedValues(possibilitiesStrings);
        possibilities.setMinValue(0);
        possibilities.setMaxValue(possibilitiesStrings.length - 1);

    }

    /**
     * called when the OK button from activity_main.xml is clicked
     * @param v the View which triggered the method call: the OK button
     */
    public void navigate(View v) {
        int choice = possibilities.getValue();
        webView.setWebViewClient(new WebViewClient());
        if (choice == 0)
            webView.loadUrl("file:///android_asset/android.html");
        else if (choice == 1)
            webView.loadUrl("file:///android_asset/checklist.html");
        else if (choice == 2)
            webView.loadUrl("http:///www.coursera.org");
        else if (choice == 3)
            webView.loadUrl("file:///android_asset/supelec.html");
    }
}

【讨论】:

  • 谢谢您的回答,但是您在 XML 中声明该方法是什么意思?我该怎么做才能使导航工作和“查看 v”?
  • 你怎么给我一个例子,当它与我使用的代码完全相同时?
猜你喜欢
  • 2011-11-17
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2013-08-05
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多