【问题标题】:Android Studio multiple numbers with spinner selection带有微调器选择的 Android Studio 多个数字
【发布时间】:2017-05-26 17:02:28
【问题描述】:

所以我试图有一个微调器,您可以在其中选择要从 GBP 转换为的货币,输入一个 GBP 值,然后通过按下按钮从微调器转换为所选货币。转换后的值将出现在下面的文本视图中

这是我正在使用的转换活动中的以下代码,应用程序在尝试从主菜单切换到此布局时崩溃,但是在我尝试添加乘法代码之前它正在工作。提前致谢。

public class Convert extends AppCompatActivity {


final EditText currency_input = (EditText) findViewById(R.id.editText_currency_input);
final TextView answer = (TextView) findViewById(R.id.textView_convert_to);

@Override
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.convert);

    Spinner spinner_convert_from = (Spinner) findViewById(R.id.spinner_convert_from);
    ArrayAdapter<CharSequence> adapter = ArrayAdapter.createFromResource(this,
            R.array.currency_array, android.R.layout.simple_spinner_item);
    adapter.setDropDownViewResource(android.R.layout.simple_spinner_dropdown_item);
    spinner_convert_from.setAdapter(adapter);
}



private void USD() {
    answer.setText(String.valueOf(Double.valueOf(String.valueOf(currency_input.getText()))*1.2798));
}

private void EUR() {
    answer.setText(String.valueOf(Double.valueOf(String.valueOf(currency_input.getText()))*1.14502));
}

private void AUD() {
    answer.setText(String.valueOf(Double.valueOf(String.valueOf(currency_input.getText()))*1.71911));
}

private void CAD() {
    answer.setText(String.valueOf(Double.valueOf(String.valueOf(currency_input.getText()))*1.7226));
}

private void JPY() {
    answer.setText(String.valueOf(Double.valueOf(String.valueOf(currency_input.getText()))*142.482));
}

private void CHF() {
    answer.setText(String.valueOf(Double.valueOf(String.valueOf(currency_input.getText()))* 1.24662));
}

private void CNY() {
    answer.setText(String.valueOf(Double.valueOf(String.valueOf(currency_input.getText()))* 8.7714));
}

private void KRW() {
    answer.setText(String.valueOf(Double.valueOf(String.valueOf(currency_input.getText()))*1430.8));
}

private void SEK() {
    answer.setText(String.valueOf(Double.valueOf(String.valueOf(currency_input.getText()))* 11.1187));
}


public class planOnClickListener implements AdapterView.OnItemSelectedListener {
    @Override
    public void onItemSelected(AdapterView<?> parent, View v, int pos,
                               long id) {
        parent.getItemAtPosition(pos);

        if (pos == 0) {
            USD();
        } else if (pos == 1) {
            EUR();
        } else if (pos == 2) {
            AUD();
        } else if (pos == 3) {
            CAD();
        } else if (pos == 4) {
            JPY();
        } else if (pos == 5) {
            CHF();
        } else if (pos == 6) {
            CNY();
        } else if (pos == 7) {
            KRW();
        } else if (pos == 8) {
            SEK();
        }
    }

    @Override
    public void onNothingSelected(AdapterView<?> arg0) {

    }
}

}

【问题讨论】:

  • 如果崩溃了 Logcat (Android Monitor) 中有对应的入口请分享
  • 对不起,我对 Android Studio 很陌生,我不太确定我在 Logcat 中寻找什么,因为当我在模拟器中运行应用程序时,其中有 1000 多条消息.
  • 是的,即使在模拟器中也有很多 :) 有一个搜索字段,您可以输入例如您的包名称以缩小搜索范围。或者,当您正在寻找崩溃报告时,您可以切换日志消息的级别(从详细到错误的几个级别)
  • 所以我再次运行应用程序并在 Logcat 中搜索类名“Convert”并将其过滤为问题级别的“错误”,this 是我得到的,再次不是确定这是否是您正在寻找的内容,并为不完全了解我在做什么而提前道歉。
  • 是的,我一直在寻找这样的东西。在我看来,您的 Convert 活动无法正常启动,但我不知道 Android 运行时决定放弃的确切时间。您的代码中至少有一件事看起来可能是一个问题:您对最终 EditText 和 TextView 的声明。请尽量不要使它们成为最终的,只在 onCreate() 中设置它们(如 ... = (EditText)findViewById(...) )

标签: java android spinner currency multiplication


【解决方案1】:

您的代码中有一些常见错误。我已经更新了你的代码。

这是工作代码:

//Convert.java

import android.support.v7.app.AppCompatActivity;
import android.os.Bundle;
import android.view.View;
import android.widget.AdapterView;
import android.widget.ArrayAdapter;
import android.widget.EditText;
import android.widget.Spinner;
import android.widget.TextView;

public class Convert extends AppCompatActivity {

    EditText currency_input ;
    TextView answer;

    String input;

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.convert);

        // Views
        currency_input = (EditText) findViewById(R.id.editText_currency_input);
        answer = (TextView) findViewById(R.id.textView_convert_to);

        // Default value
        currency_input.setText("0.0");

        Spinner spinner_convert_from = (Spinner) findViewById(R.id.spinner_convert_from);
        ArrayAdapter<CharSequence> adapter = ArrayAdapter.createFromResource(this,
                R.array.currency_array, android.R.layout.simple_spinner_item);
        adapter.setDropDownViewResource(android.R.layout.simple_spinner_dropdown_item);
        spinner_convert_from.setAdapter(adapter);

        // Add item selected listener
        spinner_convert_from.setOnItemSelectedListener(new AdapterView.OnItemSelectedListener() {
            @Override
            public void onItemSelected(AdapterView<?> parent, View v, int pos,
                                       long id) {

                // Get input text 
                input = currency_input.getText().toString();

                if (pos == 0) {
                    USD();
                } else if (pos == 1) {
                    EUR();
                } else if (pos == 2) {
                    AUD();
                } else if (pos == 3) {
                    CAD();
                } else if (pos == 4) {
                    JPY();
                } else if (pos == 5) {
                    CHF();
                } else if (pos == 6) {
                    CNY();
                } else if (pos == 7) {
                    KRW();
                } else if (pos == 8) {
                    SEK();
                }
            }

            @Override
            public void onNothingSelected(AdapterView<?> adapterView) {

            }
        });

    }

    private void USD() {
        answer.setText(String.valueOf(Double.valueOf(input)*1.2798));
    }

    private void EUR() {
        answer.setText(String.valueOf(Double.valueOf(input)*1.14502));
    }

    private void AUD() {
        answer.setText(String.valueOf(Double.valueOf(input)*1.71911));
    }

    private void CAD() {
        answer.setText(String.valueOf(Double.valueOf(input)*1.7226));
    }

    private void JPY() {
        answer.setText(String.valueOf(Double.valueOf(input)*142.482));
    }

    private void CHF() {
        answer.setText(String.valueOf(Double.valueOf(input)* 1.24662));
    }

    private void CNY() {
        answer.setText(String.valueOf(Double.valueOf(input)* 8.7714));
    }

    private void KRW() {
        answer.setText(String.valueOf(Double.valueOf(input)*1430.8));
    }

    private void SEK() {
        answer.setText(String.valueOf(Double.valueOf(input)* 11.1187));
    }
}

这是您的布局 XML:

// convert.xml

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout 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:orientation="vertical"
    android:layout_margin="16dp"
    tools:context="com.ferdous.stackoverflowanswer.Convert">

    <TextView
        android:id="@+id/textView_convert_to"
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:textSize="24dp"/>

    <Spinner
        android:id="@+id/spinner_convert_from"
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:layout_marginTop="16dp">

    </Spinner>

    <EditText
        android:id="@+id/editText_currency_input"
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:layout_marginTop="16dp"/>

</LinearLayout>

输出:

【讨论】:

  • 非常感谢,非常感谢您的帮助。
  • 非常欢迎...如果我的答案看起来有用,请将其标记为正确答案:)
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2019-05-08
  • 1970-01-01
  • 2014-01-10
  • 1970-01-01
相关资源
最近更新 更多