Android:Onclick没有找到onclick方法

时间:2017-03-19 17:41:53

标签: java android onclick

我正在尝试制作使用按钮的自定义视图,但是,两个按钮的android:Onclick会导致应用崩溃。 ClickListener也不起作用。

我从运行调试工具得到的错误是:

java.lang.IllegalStateException: Could not find a method addMenu(View) in the activity class com.android.tools.fd.runtime.BootstrapApplication for onClick handler on view class android.widget.Button with id 'increase'

这是我的java代码:

public class MenuItems extends LinearLayout{

    private View plusButton;
    private View negateButton;
    private EditText priceBox;
    private TextView total;
    private TextView name;
    private int totalItems;
    private double totalPrice;
    private double price;

    public MenuItems(Context context) {
        super(context);
        init();
    }

    public MenuItems(Context context, AttributeSet attrs) {
        super(context, attrs);
        init();
    }
    public void init()
    {

        LayoutInflater inflater=LayoutInflater.from(getContext());
        inflater.inflate(R.layout.menu_item,this);

        plusButton=findViewById(R.id.increase);
        negateButton=findViewById(R.id.decrease);
        total=(TextView)findViewById(R.id.total);
        name=(EditText)findViewById(R.id.ItemName);
        priceBox=(EditText)findViewById(R.id.Price) ;

        total.setText("5");
        negateButton.setBackgroundColor(Color.RED);

        plusButton.setOnClickListener(new Button.OnClickListener() {
            public void onClick(View v) {
                plusButton.setBackgroundColor(Color.RED);
                increase();
            }
        });
        negateButton.setOnClickListener(new Button.OnClickListener() {
            public void onClick(View v) {
                decrease();
                negateButton.setBackgroundColor(Color.RED);
            }
        });

        price=0;
        totalItems=0;
        upDateTotal();
        String pString=priceBox.getText().toString();
        price=Double.parseDouble(pString);
    }
    public void increase(View view)
    {
        totalItems++;
        upDateTotal();
        System.out.println("plus");
        plusButton.setBackgroundColor(Color.RED);

    }

    public void decrease(View v)
    {
        if(totalItems>0)
            totalItems--;
        upDateTotal();
        System.out.println("minus");
    }

这是我的所有xml:

<?xml version="1.0" encoding="utf-8"?>
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:tools="http://schemas.android.com/tools"
    android:id="@+id/menu_items"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:paddingBottom="@dimen/activity_vertical_margin"
    android:paddingLeft="@dimen/activity_horizontal_margin"
    android:paddingRight="@dimen/activity_horizontal_margin"
    android:paddingTop="@dimen/activity_vertical_margin"
    tools:context="com.mohs.joey.seniorproject.MenuItems">

    <LinearLayout
        android:orientation="vertical"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_alignParentTop="true"
        android:layout_alignParentLeft="true"
        android:layout_alignParentStart="true">

        <LinearLayout
            android:orientation="horizontal"
            android:layout_width="match_parent"
            android:layout_height="wrap_content">

            <EditText
                android:layout_width="wrap_content"
                android:layout_height="wrap_content"
                android:inputType="textPersonName"
                android:ems="10"
                android:id="@+id/ItemName"
                android:layout_weight="1"
                android:textColor="@color/colorAccent"
                android:text="name" />

            <EditText
                android:layout_width="wrap_content"
                android:layout_height="wrap_content"
                android:inputType="numberDecimal"
                android:ems="10"
                android:id="@+id/Price"
                android:textColor="@color/colorAccent"
                android:hint="Price"
                android:shadowColor="@color/colorAccent"
                android:text="0.00" />

        </LinearLayout>

        <LinearLayout
            android:orientation="horizontal"
            android:layout_width="match_parent"
            android:layout_height="wrap_content">

            <Button
                android:text="-"
                android:layout_width="50dp"
                android:layout_height="wrap_content"
                android:id="@+id/decrease"
                android:layout_weight="1"
                android:backgroundTint="@color/colorAccent"
                android:onClick="increase"/>

            <TextView
                android:text="Amount"
                android:layout_width="wrap_content"
                android:layout_height="wrap_content"
                android:id="@+id/total"
                android:layout_weight="1"
                android:textColor="@color/colorAccent" />

            <Button
                android:text="+"
                android:layout_width="50dp"
                android:layout_height="wrap_content"
                android:id="@+id/increase"
                android:layout_weight="1"
                android:backgroundTint="@color/colorAccent"
                android:elevation="0dp"
                android:onClick="increase" />
        </LinearLayout>
    </LinearLayout>

</RelativeLayout>

我在一个单独的类中访问此方法中的MenuItems:

public void addMenu(View view)
    {
        LayoutInflater vi = (LayoutInflater) getApplicationContext().getSystemService(Context.LAYOUT_INFLATER_SERVICE);
        View v = vi.inflate(R.layout.menu_item, null);
        v.setId(menu);
        ViewGroup insertPoint = (ViewGroup) findViewById(R.id.backLayer);
        insertPoint.addView(v, 0, new ViewGroup.LayoutParams(ViewGroup.LayoutParams.WRAP_CONTENT, ViewGroup.LayoutParams.WRAP_CONTENT));
        menu++;
    }

这是我的新主要活动:

package com.mohs.joey.seniorproject;

import android.content.Context;
import android.content.Intent;
import android.graphics.Color;
import android.support.v7.app.AppCompatActivity;
import android.os.Bundle;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;
import android.widget.EditText;
import android.widget.PopupWindow;
import android.widget.TextView;

public class ConcessionMenus extends AppCompatActivity {
    int menu=0;

    private View plusButton;
    private View negateButton;
    private EditText priceBox;
    private TextView total;
    private TextView name;
    private int totalItems;
    private double totalPrice;
    private double price;

    PopupWindow popup;
    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_concession_menus);
        plusButton=findViewById(R.id.increase);
        negateButton=findViewById(R.id.decrease);
        total=(TextView)findViewById(R.id.total);
        name=(EditText)findViewById(R.id.ItemName);
        priceBox=(EditText)findViewById(R.id.Price) ;
//        TextView totalPrice=(TextView)findViewById(R.id.totalPrice);
    }

    public void addMenu(View view)
    {
        LayoutInflater vi = (LayoutInflater) getApplicationContext().getSystemService(Context.LAYOUT_INFLATER_SERVICE);

        View vw = vi.inflate(R.layout.menu_item, null);
        vw.setId(menu);
        ViewGroup insertPoint = (ViewGroup) findViewById(R.id.backLayer);
        insertPoint.addView(vw, 0, new ViewGroup.LayoutParams(ViewGroup.LayoutParams.WRAP_CONTENT, ViewGroup.LayoutParams.WRAP_CONTENT));
        menu++;
    }
    public Intent newIntent()
    {
        Intent intent=new Intent(this,Menu.class);
        return intent;
    }
    public void increase(View v)
    {
        totalItems++;
        upDateTotal();
        System.out.println("plus");
        plusButton.setBackgroundColor(Color.RED);

    }

    public void decrease(View v)
    {
        if(totalItems>0)
            totalItems--;
        upDateTotal();
        System.out.println("minus");
    }

    public void upDateTotal()
    {
        total.setText(""+totalItems);
        totalPrice=price*totalItems;
    }

    public double totalPrice()
    {
        return totalPrice;
    }

}

任何帮助将不胜感激。

1 个答案:

答案 0 :(得分:0)

问题是当按钮想要在您点击它时执行操作时,它应该能够在increase()类中找到方法MainActivity,因为方法increase()在另一个类上,该按钮永远不会找到该方法,并且它们会崩溃,因为您将布局xml设置为主活动而不是类MenuItem,以解决这个问题,只需将这些方法移到您的{{{ 1}}

OR

将您的按钮引用传递到班级MainActivity class并按照您的意愿行事

PS:输入MenuItems即可找到ID,但由于您将内容视图设置为R.id

,因此您无法使用这些ID