首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Android:Onclick未找到onclick方法

Android:Onclick未找到onclick方法
EN

Stack Overflow用户
提问于 2017-03-20 01:41:53
回答 1查看 68关注 0票数 0

我正在尝试制作一个使用按钮的自定义视图,然而,这两个按钮的android:Onclick导致应用程序崩溃。ClickListeners也不能工作。

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

代码语言:javascript
复制
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代码:

代码语言:javascript
复制
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:

代码语言:javascript
复制
<?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:

代码语言:javascript
复制
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++;
    }

这是我的新的主要活动:

代码语言:javascript
复制
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;
    }

}

任何帮助都将不胜感激。

EN

回答 1

Stack Overflow用户

发布于 2017-03-20 02:06:58

问题是,当按钮想要执行操作时,当您单击它时,它应该能够在您的MainActivity类中找到方法increase(),因为方法increase()在另一个类上,按钮永远找不到该方法,并且它们将崩溃,因为您将布局xml设置为主要活动,而不是MenuItem类,要修复此问题,只需将这些内容移动到MainActivity class中的方法即可

将您的按钮的引用传递给MenuItems类,并在那里执行您想要的操作

PS : id可以通过输入R.id找到,但是您不能使用这些id,因为您将内容视图设置为您的MainActivity

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/42889916

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档