Мое приложение Xamarin.Android ломается во время отладки, и я не могу найти никаких ошибок - PullRequest
0 голосов
/ 02 июля 2018

Вот что я получаю: «Необработанное исключение: Java.Lang.IllegalStateException: не удалось найти метод TwoClicked (View) в контексте родителя или предка для атрибута android: onClick, определенного в классе представления android.support.v7.widget. AppCompatButton с идентификатором «два» Вот мой код XAML:

<RelativeLayout 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"
android:minWidth="25px"
android:minHeight="25px">
<LinearLayout
    android:orientation="vertical"
    android:minWidth="25px"
    android:minHeight="25px"
    android:layout_width="fill_parent"
    android:layout_height="fill_parent"
    android:id="@+id/linearLayout1">
    <TextView
        android:textAppearance="?android:attr/textAppearanceMedium"
        android:layout_width="fill_parent"
        android:layout_height="wrap_content"
        android:id="@+id/result"
        android:textStyle="bold|normal|italic"
        android:textSize="52dp"
        android:textAlignment="textEnd"
        android:paddingEnd="10dp" />
    <Button
            android:id="@+id/CE"
            android:layout_gravity="left|top"
            android:text="CE"
            android:height="90dp"
            android:width="94dp"
            android:textSize="25dp" />
        <Button
            android:id="@+id/seven"
            android:layout_gravity="left|top"
            android:text="7"
            android:height="90dp"
            android:width="94dp"
            android:textSize="25dp"
            android:onClick="SevenClicked" />
        <Button
            android:id="@+id/four"
            android:layout_gravity="left|top"
            android:text="4"
            android:height="90dp"
            android:width="94dp"
            android:textSize="25dp"
            android:onClick="FourClicked" />
        <Button
            android:id="@+id/one"
            android:layout_gravity="left|top"
            android:text="1"
            android:height="90dp"
            android:width="94dp"
            android:textSize="25dp"
            android:onClick="OneClicked" />
        <Button
            android:id="@+id/backspace"
            android:layout_gravity="left|top"
            android:text="&lt;-"
            android:height="90dp"
            android:width="94dp"
            android:textSize="25dp" />
        <Button
            android:id="@+id/leftBracket"
            android:layout_gravity="left|top"
            android:text="("
            android:height="90dp"
            android:width="94dp"
            android:textSize="25dp"
            android:onClick="LeftBracketClicked" />
        <Button
            android:id="@+id/eight"
            android:layout_gravity="left|top"
            android:text="8"
            android:height="90dp"
            android:width="94dp"
            android:textSize="25dp"
            android:onClick="EightClicked" />
        <Button
            android:id="@+id/five"
            android:layout_gravity="left|top"
            android:text="5"
            android:height="90dp"
            android:width="94dp"
            android:textSize="25dp"
            android:onClick="FiveClicked" />
        <Button
            android:id="@+id/two"
            android:layout_gravity="left|top"
            android:text="2"
            android:height="90dp"
            android:width="94dp"
            android:textSize="25dp"
            android:onClick="TwoClicked" />
        <Button
            android:id="@+id/zero"
            android:layout_gravity="left|top"
            android:text="0"
            android:height="90dp"
            android:width="94dp"
            android:textSize="25dp"
            android:onClick="ZeroClicked" />
        <Button
            android:id="@+id/rightBracket"
            android:layout_gravity="left|top"
            android:text=")"
            android:height="90dp"
            android:width="94dp"
            android:textSize="25dp"
            android:onClick="RightBracketClicked" />
        <Button
            android:id="@+id/nine"
            android:layout_gravity="left|top"
            android:height="90dp"
            android:width="94dp"
            android:textSize="25dp"
            android:text="9"
            android:onClick="NineClicked" />
        <Button
            android:id="@+id/six"
            android:layout_gravity="left|top"
            android:text="6"
            android:height="90dp"
            android:width="94dp"
            android:textSize="25dp"
            android:onClick="SixClicked" />
        <Button
            android:id="@+id/three"
            android:layout_gravity="left|top"
            android:text="3"
            android:height="90dp"
            android:width="94dp"
            android:textSize="25dp"
            android:onClick="ThreeClicked" />
        <Button
            android:id="@+id/period"
            android:layout_gravity="left|top"
            android:text="."
            android:height="90dp"
            android:width="94dp"
            android:textSize="25dp" />
        <Button
            android:id="@+id/plus"
            android:layout_gravity="left|top"
            android:text="+"
            android:height="90dp"
            android:width="94dp"
            android:textSize="25dp" />
        <Button
            android:id="@+id/minus"
            android:layout_gravity="left|top"
            android:text="-"
            android:height="90dp"
            android:width="94dp"
            android:textSize="25dp" />
        <Button
            android:id="@+id/multiplication"
            android:layout_gravity="left|top"
            android:text="x"
            android:height="90dp"
            android:width="94dp"
            android:textSize="25dp" />
        <Button
            android:id="@+id/division"
            android:layout_gravity="left|top"
            android:text="/"
            android:height="90dp"
            android:width="94dp"
            android:textSize="25dp" />
        <Button
            android:id="@+id/equals"
            android:layout_gravity="left|top"
            android:text="="
            android:height="90dp"
            android:width="94dp"
            android:textSize="25dp" />
    </GridLayout>
</LinearLayout>

Вот мой код C #:

using Xamarin;
using Android.App;
using Android.Widget;
using Android.OS;
using Android.Support.V7.App;

namespace Calculator
{
[Activity(Label = "@string/app_name", Theme = "@style/AppTheme",
MainLauncher = true)]
public class MainActivity : AppCompatActivity
{
    public TextView result;


    protected override void OnCreate(Bundle savedInstanceState)
    {
        base.OnCreate(savedInstanceState);

        // Set our view from the "main" layout resource

        SetContentView(Resource.Layout.activity_main);

        result = FindViewById<TextView>(Resource.Id.result);

    }

    [Java.Interop.Export("ZeroClicked")]
    public void ZeroClicked(object sender, System.EventArgs e)
    {

        result.Text = result.Text + "0";

    }
    [Java.Interop.Export("OneClicked")]
    public void OneClicked(object sender, System.EventArgs e)
    {

        result.Text = result.Text + "1";

    }
    [Java.Interop.Export("TwoClicked")]
    public void TwoClicked(object sender, System.EventArgs e)
    {

        result.Text = result.Text + "2";

    }
    [Java.Interop.Export("ThreeClicked")]
    public void ThreeClicked(object sender, System.EventArgs e)
    {
        result.Text = result.Text + "3";

    }
    [Java.Interop.Export("FourClicked")]
    public void FourClicked(object sender, System.EventArgs e)
    {
        result.Text = result.Text + "4";
    }
    [Java.Interop.Export("FiveClicked")]
    public void FiveClicked(object sender, System.EventArgs e)
    {
        result.Text = result.Text + "5";
    }
    [Java.Interop.Export("SixClicked")]
    public void SixClicked(object sender, System.EventArgs e)
    {
        result.Text = result.Text + "6";
    }
    [Java.Interop.Export("SevenClicked")]
    public void SevenClicked(object sender, System.EventArgs e)
    {
        result.Text = result.Text + "7";
    }
    [Java.Interop.Export("EightClicked")]
    public void EightClicked(object sender, System.EventArgs e)
    {
        result.Text = result.Text + "8";
    }
    [Java.Interop.Export("NineClicked")]
    public void NineClicked(object sender, System.EventArgs e)
    {
        result.Text = result.Text + "9";
    }
    [Java.Interop.Export("PlusClicked")]
    public void PlusClicked(object sender, System.EventArgs e)
    {
        result.Text = result.Text + "+";
    }
    [Java.Interop.Export("MinusClicked")]
    public void MinusClicked(object sender, System.EventArgs e)
    {
        result.Text = result.Text + "-";
    }
    [Java.Interop.Export("MultiplicationClicked")]
    public void MultiplicationClicked(object sender, System.EventArgs e)
    {
        result.Text = result.Text + "*";
    }
    [Java.Interop.Export("DivisionClicked")]
    public void DivisionClicked(object sender, System.EventArgs e)
    {
        result.Text = result.Text + "/";
    }
    [Java.Interop.Export("LeftBracketClicked")]
    public void LeftBracketClicked(object sender, System.EventArgs e)
    {
        result.Text = result.Text + "(";
    }


    [Java.Interop.Export("RightBracketClicked")]
    public void RightBracketClicked(object sender, System.EventArgs e)
    {
        result.Text = result.Text + ")";
    }
}

} Не могли бы вы мне помочь? Я получаю эту ошибку, когда нажимаю кнопку в режиме отладки: Моя ошибка

Ответы [ 3 ]

0 голосов
/ 02 июля 2018

Чтобы захватить метод onclick, когда вы определяете свой onclick on xml, используйте Java.Interop.Export как здесь Xamarin.Android: Как перехватить события Button, определенные в атрибуте OnClick XML?

Мое предложение будет определять ваш метод onclick для вашей активности, как

var buttonSeven = FindViewById<Button>(Resource.Id.seven);
buttonSeven +=(object sender, EventArgs e) => 
                {
                    //anything you wanna do when button clicked
                    result.Text=result.Text+"7"
                };
0 голосов
/ 02 июля 2018

Если вы собираетесь использовать android:onClick в вашем AXML для автоматической магической привязки к функции щелчка, вам нужно экспортировать эти методы C # в сгенерированную оболочку Java, чтобы их можно было найти в коде Java и таким образом, перезвоните в ваш C # через Mono / JNI:

Итак, на основе AXML onClick:

android:onClick="javaNineClicked"

должен иметь соответствующий Export с тем же именем:

[Java.Interop.Export("javaNineClicked")]
public void NineClicked(object sender, System.EventArgs e)
{
    result.Text = result.Text + "9";
}
0 голосов
/ 02 июля 2018
private void TwoClicked(object sender, System.EventArgs e)
{

    result.Text = result.Text + "2";

}

должно быть

public void TwoClicked(object sender, System.EventArgs e)
{
    result.Text = result.Text + "2";
}

то же самое со всеми другими методами onClick

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...