按钮点击时屏幕/活动的问题

时间:2011-07-13 20:00:13

标签: android android-layout android-manifest

  

可能重复:
  setOnClickListener not working and throwing error

我正在尝试开发一个折扣计算器,其中会有一个欢迎屏幕,点击按钮,不同的计算器将起作用。

目前我没有收到错误,但点击了:

按钮1 - 计算器,我在手机上收到错误“应用程序testcalculator停止 - 强制关闭”

当我点击按钮2 - 计算器2 时,我什么也得不到,我不知道为什么。

按钮3 - 退出正常

以下是我的完整代码/程序:

welcome.java

    package com.testcalculator;

import android.app.Activity;
import android.content.Intent;
import android.os.Bundle;
import android.view.View;
import android.view.View.OnClickListener;
import android.widget.Button;





public class welcome extends Activity implements OnClickListener
{
   public void onCreate(Bundle savedInstanceState)
   {
       super.onCreate(savedInstanceState);
        setContentView(R.layout.welcome1);


        //////// MENU  //////////
        Button playBtn = (Button) findViewById(R.id.playBtn);
        playBtn.setOnClickListener(this);


        Button playBtn2 = (Button) findViewById(R.id.playBtn2);
        playBtn2.setOnClickListener(this);


        Button exitBtn = (Button) findViewById(R.id.exitBtn);
        exitBtn.setOnClickListener(this);

    }


   /**
     * Listener for game menu
     */
    public void onClick(View v) {
        Intent i;

        switch (v.getId()){
        case R.id.playBtn :

            i = new Intent(this, testcalculator.class);
            startActivity(i);
            break;

        case R.id.playBtn2 :

            i = new Intent(this, testcalculator2.class);
            startActivity(i);
            break;


        case R.id.exitBtn :
            finish();
            break;
        }

    }

   }

welcome1.xml

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
   android:orientation="vertical"
   android:layout_width="fill_parent"
   android:layout_height="fill_parent"
>

<Button
   android:id ="@+id/playBtn"
   android:layout_width="wrap_content"
   android:layout_height="wrap_content"
   android:text="Calculator"
/>

<Button
   android:id ="@+id/playBtn2"
   android:layout_width="wrap_content"
   android:layout_height="wrap_content"
   android:text="Calculator2"
/>

<Button
   android:id ="@+id/exitBtn"
   android:layout_width="wrap_content"
   android:layout_height="wrap_content"
   android:text="Exit"
/>

</LinearLayout>

testcalculator.java

    package com.testcalculator;

import android.app.Activity;
import android.os.Bundle;
import android.view.View;
import android.view.View.OnClickListener;
import android.widget.AdapterView;
import android.widget.ArrayAdapter;
import android.widget.Button;
import android.widget.EditText;
import android.widget.Spinner;
import android.widget.AdapterView.OnItemSelectedListener;
import android.widget.TextView;
import android.widget.Toast;

public class testcalculator extends Activity {


    double initial_price;
    double discount;
    double final_price; 

    /** Called when the activity is first created. */
    @Override
    public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.testcalculator);
        Spinner spinner = (Spinner) findViewById(R.id.spinner1);
        ArrayAdapter<CharSequence> adapter = ArrayAdapter.createFromResource(
              this, R.array.discount, android.R.layout.simple_spinner_item);
        adapter.setDropDownViewResource(android.R.layout.simple_spinner_dropdown_item);
        spinner.setAdapter(adapter);
        spinner.setOnItemSelectedListener(new OnItemSelectedListener(){

            @Override
            public void onItemSelected(AdapterView<?> parent, View view, int pos, long id) {

                if (pos==0){
                    discount=10;
                }
                else if (pos==1){
                    discount=15;
                }
                else if (pos==2){
                    discount=18;
                }
            }

            @Override
            public void onNothingSelected(AdapterView<?> arg0) {
                // TODO Auto-generated method stub
            }   
        });

        Button calculate = (Button) findViewById(R.id.calculate);
        calculate.setOnClickListener(new OnClickListener(){
            @Override
            public void onClick(View v) {
                EditText amount1 = (EditText) findViewById(R.id.amount1);
                if (amount1.length()>0 ) {
                    initial_price=Double.parseDouble(amount1.getText().toString());
                    TextView final_price_text = (TextView) findViewById(R.id.final_price);
                    final_price=initial_price-(initial_price*discount/100);
                    final_price_text.setText("Final Price : "+final_price);
                }
                else {
                    Toast.makeText(getBaseContext(), "Please enter price", Toast.LENGTH_SHORT).show();
                }
            }
        });       
    }
}

testcalculator.xml

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:orientation="vertical"
    android:layout_width="fill_parent"
    android:layout_height="fill_parent"
    >
    <Spinner
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:id="@+id/spinner1"></Spinner>
    <TextView
        android:layout_width="fill_parent"
        android:layout_height="wrap_content"
        android:text="Enter the price" />
    <EditText
        android:layout_height="wrap_content"
        android:id="@+id/amount1"
        android:text=""
        android:layout_width="match_parent"
        android:numeric="decimal"></EditText>
    <Button
        android:text="Calculate Result"
        android:id="@+id/calculate"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"></Button>
    <TextView
        android:layout_height="wrap_content"
        android:textAppearance="?android:attr/textAppearanceLarge"
        android:layout_width="fill_parent"
        android:id="@+id/final_price"></TextView>

</LinearLayout>

testcalculator2.java

    package com.testcalculator;

import android.app.Activity;
import android.os.Bundle;
import android.view.View;
import android.view.View.OnClickListener;
import android.widget.AdapterView;
import android.widget.ArrayAdapter;
import android.widget.Button;
import android.widget.EditText;
import android.widget.Spinner;
import android.widget.AdapterView.OnItemSelectedListener;
import android.widget.TextView;
import android.widget.Toast;

public class testcalculator2 extends Activity {


    double initial_price;
    double discount2;
    double final_price2;    

    /** Called when the activity is first created. */
    @Override
    public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.testcalculator2);
        Spinner spinner = (Spinner) findViewById(R.id.spinner2);
        ArrayAdapter<CharSequence> adapter = ArrayAdapter.createFromResource(
              this, R.array.discount2, android.R.layout.simple_spinner_item);
        adapter.setDropDownViewResource(android.R.layout.simple_spinner_dropdown_item);
        spinner.setAdapter(adapter);
        spinner.setOnItemSelectedListener(new OnItemSelectedListener(){

            @Override
            public void onItemSelected(AdapterView<?> parent, View view, int pos, long id) {

                if (pos==0){
                    discount2=20;
                }
                else if (pos==1){
                    discount2=25;
                }
                else if (pos==2){
                    discount2=28;
                }
            }

            @Override
            public void onNothingSelected(AdapterView<?> arg0) {
                // TODO Auto-generated method stub
            }   
        });

        Button calculate2 = (Button) findViewById(R.id.calculate2);
        calculate2.setOnClickListener(new OnClickListener(){
            @Override
            public void onClick(View v) {
                EditText amount2 = (EditText) findViewById(R.id.amount2);
                if (amount2.length()>0 ) {
                    initial_price=Double.parseDouble(amount2.getText().toString());
                    TextView final_price_text = (TextView) findViewById(R.id.final_price2);
                    final_price2=initial_price-(initial_price*discount2/100);
                    final_price_text.setText("Final Price : "+final_price2);
                }
                else {
                    Toast.makeText(getBaseContext(), "Please enter price", Toast.LENGTH_SHORT).show();
                }
            }
        });       
    }
}

testcalculator2.xml

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:orientation="vertical"
    android:layout_width="fill_parent"
    android:layout_height="fill_parent"
    >
    <Spinner
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:id="@+id/spinner2"></Spinner>
    <TextView
        android:layout_width="fill_parent"
        android:layout_height="wrap_content"
        android:text="Enter the price" />
    <EditText
        android:layout_height="wrap_content"
        android:id="@+id/amount2"
        android:text=""
        android:layout_width="match_parent"
        android:numeric="decimal"></EditText>
    <Button
        android:text="Calculate Result"
        android:id="@+id/calculate2"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"></Button>
    <TextView
        android:layout_height="wrap_content"
        android:textAppearance="?android:attr/textAppearanceLarge"
        android:layout_width="fill_parent"
        android:id="@+id/final_price2"></TextView>

</LinearLayout>

的AndroidManifest.xml

<?xml version="1.0" encoding="utf-8"?>
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
      package="com.testcalculator"
      android:versionCode="1"
      android:versionName="1.0">


    <application android:icon="@drawable/icon" android:label="@string/app_name">
        <activity android:name=".welcome"
                  android:label="@string/app_name">
            <intent-filter>
                <action android:name="android.intent.action.MAIN" />
                <category android:name="android.intent.category.LAUNCHER" />
            </intent-filter>
        </activity>
        <activity android:name=".testcalculator" />
        <activity android:name=".testcalculator2" />




    </application>
</manifest>

的strings.xml

<?xml version="1.0" encoding="utf-8"?>
<resources>
    <string name="hello">Hello World, testcalculator!</string>
    <string name="app_name">testcalculator</string>
    <string-array name="discount">
        <item>10% discount A</item>
        <item>15% discount B</item>
        <item>18% discount C</item>
    </string-array>
    <string-array name="discount2">
        <item>20% discount A</item>
        <item>25% discount B</item>
        <item>28% discount C</item>
    </string-array>
</resources>

main.xml中

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:orientation="vertical"
    android:layout_width="fill_parent"
    android:layout_height="fill_parent"
    >
<TextView  
    android:layout_width="fill_parent" 
    android:layout_height="wrap_content" 
    android:text="@string/hello"
    />
</LinearLayout>

请帮帮我!!!

1 个答案:

答案 0 :(得分:1)

检查你的testcalculator.onCreate()和testcalculator2.onCreate() - 你使用相同的main.xml(setContentView(R.layout.main);),它不包含R.id.spinner1或R.id.spinner2