【发布时间】:2017-12-29 01:17:53
【问题描述】:
我试图显示两个用户输入的结果 - 数字字段但徒劳无功。它应该实时发生,即无需按任何按钮,结果应显示为字段数据更改,默认值为“零”。 这里 number1 和 number2 是两个输入,总和是 number1+number2 的结果。 请帮忙。
更新: 我已经按照 [@Jacky] 的建议输入了代码,但是一旦我尝试输入任何数字,应用程序就会崩溃。尝试使用调试 [从我在模拟器上输入数据开始] 并且也将其结果放入其中,因为它可能会有所帮助。 请帮忙。
主活动:
package com.ck.cg;
import android.support.v7.app.AppCompatActivity;
import android.os.Bundle;
import android.text.Editable;
import android.text.TextWatcher;
import android.widget.EditText;
import android.widget.TextView;
public class MainActivity extends AppCompatActivity {
private EditText getnumber1;
private EditText getnumber2;
private TextView displaygrossTotal;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
getnumber1 = (EditText) findViewById(R.id.number1);
getnumber2 = (EditText) findViewById(R.id.number2);
displaygrossTotal = (TextView) findViewById(R.id.grossTotal);
getQuantity.addTextChangedListener(new TextWatcher() {
@Override
public void beforeTextChanged(CharSequence charSequence, int i, int i1, int i2) {
}
@Override
public void onTextChanged(CharSequence charSequence, int i, int i1, int i2) {
}
@Override
public void afterTextChanged(Editable editable) {
GetSum();
}
});
getRate.addTextChangedListener(new TextWatcher() {
@Override
public void beforeTextChanged(CharSequence charSequence, int i, int i1, int i2) {
}
@Override
public void onTextChanged(CharSequence charSequence, int i, int i1, int i2) {
}
@Override
public void afterTextChanged(Editable editable) {
GetSum();
}
});
}
private void GetSum() {
int a = 0, b = 0, total;
if (getnumber1.getText() != null && !getnumber1.getText().toString().equals("")) {
try {
a = Integer.parseInt(getnumber1.getText().toString());
} catch (Exception e) {
a = 0;
}
}
if (getnumber2.getText() != null && !getnumber2.getText().toString().equals("")) {
try {
b = Integer.parseInt(getnumber2.getText().toString());
} catch (Exception e) {
b = 0;
}
}
total = a + b;
displaygrossTotal.setText(total);
}
}
xml:
<?xml version="1.0" encoding="utf-8"?>
<android.support.constraint.ConstraintLayout
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"
tools:context="com.ck.cg.MainActivity">
<EditText
android:id="@+id/number1"
android:labelFor="@+id/number1"
android:layout_width="90dp"
android:layout_height="45dp"
android:layout_marginStart="8dp"
android:layout_marginTop="8dp"
android:contentDescription="@string/number_1"
android:ems="10"
android:inputType="numberDecimal"
app:layout_constraintStart_toStartOf="parent"
app:layout_constraintTop_toTopOf="parent" />
<EditText
android:id="@+id/number2"
android:labelFor="@+id/number2"
android:layout_width="90dp"
android:layout_height="45dp"
android:layout_marginStart="8dp"
android:layout_marginTop="8dp"
android:contentDescription="@string/number_2"
android:ems="10"
android:inputType="numberDecimal"
app:layout_constraintStart_toEndOf="@+id/number1"
app:layout_constraintTop_toTopOf="parent" />
<TextView
android:id="@+id/grossTotal"
android:layout_width="90dp"
android:layout_height="45dp"
android:layout_marginStart="8dp"
android:layout_marginTop="8dp"
android:contentDescription="@string/gross_total"
app:layout_constraintStart_toEndOf="@+id/number2"
app:layout_constraintTop_toTopOf="parent" />
<Button
android:id="@+id/button"
android:layout_width="50dp"
android:layout_height="45dp"
android:layout_marginEnd="8dp"
android:layout_marginTop="8dp"
android:text="+"
android:textStyle="bold"
app:layout_constraintEnd_toEndOf="parent"
app:layout_constraintTop_toTopOf="parent" />
调试:
W/ResourceType: No package identifier when getting value for resource number 0x00000001
D/AndroidRuntime: Shutting down VM
E/AndroidRuntime: FATAL EXCEPTION: main
Process: com.ck.cg, PID: 6801
android.content.res.Resources$NotFoundException: String resource ID #0x1
at android.content.res.Resources.getText(Resources.java:335)
at android.widget.TextView.setText(TextView.java:4555)
at com.ck.cg.MainActivity.GetSum(MainActivity.java:77)
at com.ck.cg.MainActivity.access$000(MainActivity.java:10)
at com.ck.cg.MainActivity$1.afterTextChanged(MainActivity.java:37)
at android.widget.TextView.sendAfterTextChanged(TextView.java:8203)
at android.widget.TextView$ChangeWatcher.afterTextChanged(TextView.java:10382)
at android.text.SpannableStringBuilder.sendAfterTextChanged(SpannableStringBuilder.java:1218)
at android.text.SpannableStringBuilder.replace(SpannableStringBuilder.java:579)
at android.text.SpannableStringBuilder.replace(SpannableStringBuilder.java:509)
at android.text.SpannableStringBuilder.replace(SpannableStringBuilder.java:508)
at android.text.method.NumberKeyListener.onKeyDown(NumberKeyListener.java:121)
at android.widget.TextView.doKeyDown(TextView.java:6285)
at android.widget.TextView.onKeyDown(TextView.java:6075)
at android.view.KeyEvent.dispatch(KeyEvent.java:2688)
at android.view.View.dispatchKeyEvent(View.java:9960)
at android.view.ViewGroup.dispatchKeyEvent(ViewGroup.java:1630)
at android.view.ViewGroup.dispatchKeyEvent(ViewGroup.java:1630)
at android.view.ViewGroup.dispatchKeyEvent(ViewGroup.java:1630)
at android.view.ViewGroup.dispatchKeyEvent(ViewGroup.java:1630)
at android.view.ViewGroup.dispatchKeyEvent(ViewGroup.java:1630)
at android.view.ViewGroup.dispatchKeyEvent(ViewGroup.java:1630)
at com.android.internal.policy.DecorView.superDispatchKeyEvent(DecorView.java:405)
at com.android.internal.policy.PhoneWindow.superDispatchKeyEvent(PhoneWindow.java:1798)
at android.app.Activity.dispatchKeyEvent(Activity.java:3021)
at android.support.v7.app.AppCompatActivity.dispatchKeyEvent(AppCompatActivity.java:534)
at android.support.v7.view.WindowCallbackWrapper.dispatchKeyEvent(WindowCallbackWrapper.java:58)
at android.support.v7.app.AppCompatDelegateImplBase$AppCompatWindowCallbackBase.dispatchKeyEvent(AppCompatDelegateImplBase.java:316)
at com.android.internal.policy.DecorView.dispatchKeyEvent(DecorView.java:319)
at android.view.ViewRootImpl$ViewPostImeInputStage.processKeyEvent(ViewRootImpl.java:4331)
at android.view.ViewRootImpl$ViewPostImeInputStage.onProcess(ViewRootImpl.java:4302)
at android.view.ViewRootImpl$InputStage.deliver(ViewRootImpl.java:3853)
at android.view.ViewRootImpl$InputStage.onDeliverToNext(ViewRootImpl.java:3906)
at android.view.ViewRootImpl$InputStage.forward(ViewRootImpl.java:3872)
at android.view.ViewRootImpl$AsyncInputStage.forward(ViewRootImpl.java:3999)
at android.view.ViewRootImpl$InputStage.apply(ViewRootImpl.java:3880)
at android.view.ViewRootImpl$AsyncInputStage.apply(ViewRootImpl.java:4056)
at android.view.ViewRootImpl$InputStage.deliver(ViewRootImpl.java:3853)
at android.view.ViewRootImpl$InputStage.onDeliverToNext(ViewRootImpl.java:3906)
at android.view.ViewRootImpl$InputStage.forward(ViewRootImpl.java:3872)
at android.view.ViewRootImpl$InputStage.apply(ViewRootImpl.java:3880)
at android.view.ViewRootImpl$InputStage.deliver(ViewRootImpl.java:3853)
at android.view.ViewRootImpl.deliverInputEvent(ViewRootImpl.java:6246)
at android.view.ViewRootImpl.doProcessInputEvents(ViewRootImpl.java:6220)
at android.view.ViewRootImpl.enqueueInputEvent(ViewRootImpl.java:6181)
at android.view.ViewRootImpl$ViewRootHandler.handleMessage(ViewRootImpl.java:3651)
at android.os.Handler.dispatchMessage(Handler.java:102)
at android.os.Looper.loop(Looper.java:154)
at android.app.ActivityThread.main(ActivityThread.java:6119)
at java.lang.reflect.Method.invoke(Native Method)
at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:886)
at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:776)
【问题讨论】:
-
在你的问题被否决之前,看看 android 中的 TextWatcher 监听器,你会在 beforeTextChanged、afterTextChanged 和 textChanged 上得到一个回调,developer.android.com/reference/android/text/TextWatcher.html
-
我在审核后删除了旧答案~~,很抱歉给您带来任何麻烦
标签: android