2017-03-19 12 views
0

ボタンを使用するカスタムビューを作成しようとしていますが、2つのボタンのandroid:Onclickが原因でアプリケーションがクラッシュします。 ClickListenersも機能しません。Android:Onclickがonclickメソッドを見つけられない

私は、デバッグ・ツールを実行しているから取得していますエラーは次のとおりです。

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

} 

任意の助けをいただければ幸いです。ボタンは、あなたがそれをクリックしたときにアクションを実行したいとき

+0

にコンテンツビューを設定するので、あなたは、これらのIDで作業することはできませんか? – ArolaAb

+0

別のクラスからメソッドを追加しました。私はMenuItemsにアクセスしました –

+0

いくつかのコードを表示してください – ArolaAb

答えて

0

問題は方法increase()が他のクラスであることから、ボタンを見つけることはありません、あなたのMainActivityクラスのメソッドincrease()を見つけることができるはずであり、あなただけの方法にこれらを移動することを修正するために、クラスMenuItemのためではない、あなたのメインの活動にごレイアウトXMLを設定するための方法は、彼らがクラッシュしますあなたのMainActivity class

OR

にあなたのボタンの参照を渡しますクラス MenuItemsとあなたが欲しいものを行う

PS:IDSはR.idを入力することで見つけることができますが、あなたは、MenuItemクラスにアクセスしなかったあなたのMainActivity

+0

私はすべてのメソッドと他の参照をメインアクティビティに移動しましたが、まったく同じエラーが発生しています –

+0

メインアクティビティのすべてのコードを表示してください – ArolaAb

+0

私は新しい主なアクティビティを追加しました –

関連する問題