更改微调项时无法更改值
Unable to change values when change spinner item
我正在做的是制作一个单位转换器应用程序,虽然它 运行 很好但是当我将微调器项目从 INCHES 更改为 FOOT 值没有改变,但是当我从 EditText
框中添加或删除数字时,它会更新为脚参数值。
我想要的是当我在文本框中输入值时,它会根据 Spinner
中选择的项目更新值,例如:如果我写 23 并且 Spinner
项目是 INCHES 然后它根据英寸转换显示所有值,当我单击 Spinner
并将其更改为 FEET 它将根据英尺转换显示我的值但这在我的情况下没有发生这只发生在我 add/delete 文本框中的一些数字它更新为 FEET .
这是Length.java文件
package com.example.farrukh.convertmee;
import android.os.Bundle;
import android.support.annotation.Nullable;
import android.support.v4.app.Fragment;
import android.text.Editable;
import android.text.TextWatcher;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;
import android.widget.AdapterView;
import android.widget.ArrayAdapter;
import android.widget.EditText;
import android.widget.Spinner;
import android.widget.TextView;
public class Length extends Fragment implements AdapterView.OnItemSelectedListener
{
String[] Lunits = {"Inches", "Feet", "Yards", "Miles", "Km", "Meters" ,"Centimeters" };
@Nullable
@Override
public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) {
// return inflater.inflate(R.layout.length_layout,null);
final View myFragmentView = inflater.inflate(R.layout.length_layout, container, false); //get laength.xml
final Spinner spin = (Spinner)myFragmentView.findViewById(R.id.spinner);
final TextView a=(TextView)myFragmentView.findViewById(R.id.textView9);
final TextView b=(TextView)myFragmentView.findViewById(R.id.textView10);
final TextView c=(TextView)myFragmentView.findViewById(R.id.textView11);
final TextView d=(TextView)myFragmentView.findViewById(R.id.textView12);
final TextView e=(TextView)myFragmentView.findViewById(R.id.textView13);
final TextView f=(TextView)myFragmentView.findViewById(R.id.textView14);
final TextView g=(TextView)myFragmentView.findViewById(R.id.textView15);
final EditText text =(EditText)myFragmentView.findViewById(R.id.editText);
spin.setOnItemSelectedListener(new AdapterView.OnItemSelectedListener() {
public void onItemSelected(AdapterView<?> parent, View view, final int position, long id) {
text.addTextChangedListener(new TextWatcher() {
@Override
public void beforeTextChanged(CharSequence s, int start, int count, int after) {
}
@Override
public void onTextChanged(CharSequence s, int start, int before, int count) {
}
@Override
public void afterTextChanged(Editable s)
{
double ans=0;
if( !s.toString().equals("") && s.toString().length() > 0 )
{
ans = Double.parseDouble(s.toString());
}
if(spin.getSelectedItem().equals("Inches"))
{
double inches = ( ans * 1 );
a.setText(" "+inches);
double feet = ( ans * 0.0833 );
b.setText(" "+feet);
double yards = ( ans * 0.02777778 );
c.setText(" " + yards);
double miles = ( ans * (1/63360) );
d.setText(" " + miles);
double kilometers = ( (ans/39370) );
e.setText(" " + kilometers);
double meters = ( ans * 0.0254 );
f.setText(" " + meters);
double centimeters = ( ans * 2.54 );
g.setText(" "+centimeters);
}
if (spin.getSelectedItem().equals("Feet"))
{
double inches = ( ans * 12 );
a.setText(" "+inches);
double feet = ( ans * 1 );
b.setText(" "+feet);
double yards = ( ans * 0.3333333 );
c.setText(" " + yards);
double miles = ( ans * (0.0001893939) );
d.setText(" " + miles);
double kilometers = ( ans * 0.0003048 );
e.setText(" " + kilometers);
double meters = ( ans * 0.3048 );
f.setText(" " + meters);
double centimeters = ( ans * 30.48 );
g.setText(" "+centimeters);
}
}
});
}
public void onNothingSelected(AdapterView<?> parent) {
}
});
ArrayAdapter aa = new ArrayAdapter(getActivity(),android.R.layout.simple_spinner_item,Lunits);
aa.setDropDownViewResource(android.R.layout.simple_spinner_dropdown_item);
spin.setAdapter(aa);
return myFragmentView;
}
@Override
public void onItemSelected(AdapterView<?> parent, View view, int position, long id) {
}
@Override
public void onNothingSelected(AdapterView<?> parent) {
}
}
删除 text.addTextChangedListener(new TextWatcher() {
侦听器。每当您从微调器中选择不同的项目时,都会调用 onItemSelected
,但是其中有一个 TextWatcher
,只有当 EditText
中的文本发生变化时才会调用它。
如果您希望同时进行转换(微调项选择和文本更改),则将整个转换代码移动到一个单独的方法中,并从两个侦听器(OnItemSelectedListener
和 TextWatcher
)中调用它但是 TextWatcher
需要独立而不是在其他监听器中。
将您的 EditText
和 TextView
声明为 class 变量(不需要 final),并添加 TextWatcher
在 Sipnner
侦听器之外。
这是我的建议:
public class Length extends Fragment implements AdapterView.OnItemSelectedListener
{
String[] Lunits = {"Inches", "Feet", "Yards", "Miles", "Km", "Meters" ,"Centimeters" };
EditText mEditText;
TextView a, b, c, d, e, f, g;
String mSelectedUnit = "";
@Nullable
@Override
public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) {
// return inflater.inflate(R.layout.length_layout,null);
final View myFragmentView = inflater.inflate(R.layout.length_layout, container, false); //get laength.xml
Spinner spin = (Spinner)myFragmentView.findViewById(R.id.spinner);
a=(TextView)myFragmentView.findViewById(R.id.textView9);
b=(TextView)myFragmentView.findViewById(R.id.textView10);
c=(TextView)myFragmentView.findViewById(R.id.textView11);
d=(TextView)myFragmentView.findViewById(R.id.textView12);
e=(TextView)myFragmentView.findViewById(R.id.textView13);
f=(TextView)myFragmentView.findViewById(R.id.textView14);
g=(TextView)myFragmentView.findViewById(R.id.textView15);
mEditText =(EditText)myFragmentView.findViewById(R.id.editText);
ArrayAdapter aa = new ArrayAdapter(getActivity(),android.R.layout.simple_spinner_item,Lunits);
aa.setDropDownViewResource(android.R.layout.simple_spinner_dropdown_item);
spin.setAdapter(aa);
spin.setOnItemSelectedListener(new AdapterView.OnItemSelectedListener() {
public void onItemSelected(AdapterView<?> parent, View view, int position, long id) {
mSelectedUnit = Lunits[position];
convertValue();
}
public void onNothingSelected(AdapterView<?> parent) {
}
});
mEditText.addTextChangedListener(new TextWatcher() {
@Override
public void beforeTextChanged(CharSequence s, int start, int count, int after) {
}
@Override
public void onTextChanged(CharSequence s, int start, int before, int count) {
}
@Override
public void afterTextChanged(Editable s)
{
convertValue();
}
});
return myFragmentView;
}
private void convertValue(){
double ans=0;
String s = mEditText.getText().toString();
if( !s.toString().equals("") && s.length() > 0 )
{
ans = Double.parseDouble(s);
}
if(mSelectedUnit.equals("Inches"))
{
double inches = ( ans * 1 );
a.setText(" "+inches);
double feet = ( ans * 0.0833 );
b.setText(" "+feet);
double yards = ( ans * 0.02777778 );
c.setText(" " + yards);
double miles = ( ans * (1/63360) );
d.setText(" " + miles);
double kilometers = ( (ans/39370) );
e.setText(" " + kilometers);
double meters = ( ans * 0.0254 );
f.setText(" " + meters);
double centimeters = ( ans * 2.54 );
g.setText(" "+centimeters);
}
if (mSelectedUnit.equals("Feet"))
{
double inches = ( ans * 12 );
a.setText(" "+inches);
double feet = ( ans * 1 );
b.setText(" "+feet);
double yards = ( ans * 0.3333333 );
c.setText(" " + yards);
double miles = ( ans * (0.0001893939) );
d.setText(" " + miles);
double kilometers = ( ans * 0.0003048 );
e.setText(" " + kilometers);
double meters = ( ans * 0.3048 );
f.setText(" " + meters);
double centimeters = ( ans * 30.48 );
g.setText(" "+centimeters);
}
}
}
}
我正在做的是制作一个单位转换器应用程序,虽然它 运行 很好但是当我将微调器项目从 INCHES 更改为 FOOT 值没有改变,但是当我从 EditText
框中添加或删除数字时,它会更新为脚参数值。
我想要的是当我在文本框中输入值时,它会根据 Spinner
中选择的项目更新值,例如:如果我写 23 并且 Spinner
项目是 INCHES 然后它根据英寸转换显示所有值,当我单击 Spinner
并将其更改为 FEET 它将根据英尺转换显示我的值但这在我的情况下没有发生这只发生在我 add/delete 文本框中的一些数字它更新为 FEET .
这是Length.java文件
package com.example.farrukh.convertmee;
import android.os.Bundle;
import android.support.annotation.Nullable;
import android.support.v4.app.Fragment;
import android.text.Editable;
import android.text.TextWatcher;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;
import android.widget.AdapterView;
import android.widget.ArrayAdapter;
import android.widget.EditText;
import android.widget.Spinner;
import android.widget.TextView;
public class Length extends Fragment implements AdapterView.OnItemSelectedListener
{
String[] Lunits = {"Inches", "Feet", "Yards", "Miles", "Km", "Meters" ,"Centimeters" };
@Nullable
@Override
public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) {
// return inflater.inflate(R.layout.length_layout,null);
final View myFragmentView = inflater.inflate(R.layout.length_layout, container, false); //get laength.xml
final Spinner spin = (Spinner)myFragmentView.findViewById(R.id.spinner);
final TextView a=(TextView)myFragmentView.findViewById(R.id.textView9);
final TextView b=(TextView)myFragmentView.findViewById(R.id.textView10);
final TextView c=(TextView)myFragmentView.findViewById(R.id.textView11);
final TextView d=(TextView)myFragmentView.findViewById(R.id.textView12);
final TextView e=(TextView)myFragmentView.findViewById(R.id.textView13);
final TextView f=(TextView)myFragmentView.findViewById(R.id.textView14);
final TextView g=(TextView)myFragmentView.findViewById(R.id.textView15);
final EditText text =(EditText)myFragmentView.findViewById(R.id.editText);
spin.setOnItemSelectedListener(new AdapterView.OnItemSelectedListener() {
public void onItemSelected(AdapterView<?> parent, View view, final int position, long id) {
text.addTextChangedListener(new TextWatcher() {
@Override
public void beforeTextChanged(CharSequence s, int start, int count, int after) {
}
@Override
public void onTextChanged(CharSequence s, int start, int before, int count) {
}
@Override
public void afterTextChanged(Editable s)
{
double ans=0;
if( !s.toString().equals("") && s.toString().length() > 0 )
{
ans = Double.parseDouble(s.toString());
}
if(spin.getSelectedItem().equals("Inches"))
{
double inches = ( ans * 1 );
a.setText(" "+inches);
double feet = ( ans * 0.0833 );
b.setText(" "+feet);
double yards = ( ans * 0.02777778 );
c.setText(" " + yards);
double miles = ( ans * (1/63360) );
d.setText(" " + miles);
double kilometers = ( (ans/39370) );
e.setText(" " + kilometers);
double meters = ( ans * 0.0254 );
f.setText(" " + meters);
double centimeters = ( ans * 2.54 );
g.setText(" "+centimeters);
}
if (spin.getSelectedItem().equals("Feet"))
{
double inches = ( ans * 12 );
a.setText(" "+inches);
double feet = ( ans * 1 );
b.setText(" "+feet);
double yards = ( ans * 0.3333333 );
c.setText(" " + yards);
double miles = ( ans * (0.0001893939) );
d.setText(" " + miles);
double kilometers = ( ans * 0.0003048 );
e.setText(" " + kilometers);
double meters = ( ans * 0.3048 );
f.setText(" " + meters);
double centimeters = ( ans * 30.48 );
g.setText(" "+centimeters);
}
}
});
}
public void onNothingSelected(AdapterView<?> parent) {
}
});
ArrayAdapter aa = new ArrayAdapter(getActivity(),android.R.layout.simple_spinner_item,Lunits);
aa.setDropDownViewResource(android.R.layout.simple_spinner_dropdown_item);
spin.setAdapter(aa);
return myFragmentView;
}
@Override
public void onItemSelected(AdapterView<?> parent, View view, int position, long id) {
}
@Override
public void onNothingSelected(AdapterView<?> parent) {
}
}
删除 text.addTextChangedListener(new TextWatcher() {
侦听器。每当您从微调器中选择不同的项目时,都会调用 onItemSelected
,但是其中有一个 TextWatcher
,只有当 EditText
中的文本发生变化时才会调用它。
如果您希望同时进行转换(微调项选择和文本更改),则将整个转换代码移动到一个单独的方法中,并从两个侦听器(OnItemSelectedListener
和 TextWatcher
)中调用它但是 TextWatcher
需要独立而不是在其他监听器中。
将您的 EditText
和 TextView
声明为 class 变量(不需要 final),并添加 TextWatcher
在 Sipnner
侦听器之外。
这是我的建议:
public class Length extends Fragment implements AdapterView.OnItemSelectedListener
{
String[] Lunits = {"Inches", "Feet", "Yards", "Miles", "Km", "Meters" ,"Centimeters" };
EditText mEditText;
TextView a, b, c, d, e, f, g;
String mSelectedUnit = "";
@Nullable
@Override
public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) {
// return inflater.inflate(R.layout.length_layout,null);
final View myFragmentView = inflater.inflate(R.layout.length_layout, container, false); //get laength.xml
Spinner spin = (Spinner)myFragmentView.findViewById(R.id.spinner);
a=(TextView)myFragmentView.findViewById(R.id.textView9);
b=(TextView)myFragmentView.findViewById(R.id.textView10);
c=(TextView)myFragmentView.findViewById(R.id.textView11);
d=(TextView)myFragmentView.findViewById(R.id.textView12);
e=(TextView)myFragmentView.findViewById(R.id.textView13);
f=(TextView)myFragmentView.findViewById(R.id.textView14);
g=(TextView)myFragmentView.findViewById(R.id.textView15);
mEditText =(EditText)myFragmentView.findViewById(R.id.editText);
ArrayAdapter aa = new ArrayAdapter(getActivity(),android.R.layout.simple_spinner_item,Lunits);
aa.setDropDownViewResource(android.R.layout.simple_spinner_dropdown_item);
spin.setAdapter(aa);
spin.setOnItemSelectedListener(new AdapterView.OnItemSelectedListener() {
public void onItemSelected(AdapterView<?> parent, View view, int position, long id) {
mSelectedUnit = Lunits[position];
convertValue();
}
public void onNothingSelected(AdapterView<?> parent) {
}
});
mEditText.addTextChangedListener(new TextWatcher() {
@Override
public void beforeTextChanged(CharSequence s, int start, int count, int after) {
}
@Override
public void onTextChanged(CharSequence s, int start, int before, int count) {
}
@Override
public void afterTextChanged(Editable s)
{
convertValue();
}
});
return myFragmentView;
}
private void convertValue(){
double ans=0;
String s = mEditText.getText().toString();
if( !s.toString().equals("") && s.length() > 0 )
{
ans = Double.parseDouble(s);
}
if(mSelectedUnit.equals("Inches"))
{
double inches = ( ans * 1 );
a.setText(" "+inches);
double feet = ( ans * 0.0833 );
b.setText(" "+feet);
double yards = ( ans * 0.02777778 );
c.setText(" " + yards);
double miles = ( ans * (1/63360) );
d.setText(" " + miles);
double kilometers = ( (ans/39370) );
e.setText(" " + kilometers);
double meters = ( ans * 0.0254 );
f.setText(" " + meters);
double centimeters = ( ans * 2.54 );
g.setText(" "+centimeters);
}
if (mSelectedUnit.equals("Feet"))
{
double inches = ( ans * 12 );
a.setText(" "+inches);
double feet = ( ans * 1 );
b.setText(" "+feet);
double yards = ( ans * 0.3333333 );
c.setText(" " + yards);
double miles = ( ans * (0.0001893939) );
d.setText(" " + miles);
double kilometers = ( ans * 0.0003048 );
e.setText(" " + kilometers);
double meters = ( ans * 0.3048 );
f.setText(" " + meters);
double centimeters = ( ans * 30.48 );
g.setText(" "+centimeters);
}
}
}
}