我是 android 开发的初学者。我有一个 TextView
、Spinner
和 EditText
。 TextView
将根据 Spinner
或 EditText
进行更改,我知道该怎么做。
我的问题是如何让 Spinner
和 EditText
一起工作,所以当我从 Spinner
中选择一个项目时,它会检查我有什么在 EditText
中打印到 TextView
之前,它必须与 EditText
相同。
EditText
代码。
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) {
if (!mEditText.getText().toString().trim().isEmpty()) {
value = Double.parseDouble(mEditText.getText().toString());
mTextView.setText(value + "");
}
}
@Override
public void afterTextChanged(Editable s) {
}
});
旋转器代码:
mSpinner.setOnItemSelectedListener(new AdapterView.OnItemSelectedListener() {
@Override
public void onItemSelected(AdapterView<?> parent, View view, int position, long id) {
if (mMapUnit.containsKey(lengthKey[position])) {
if (!mEditText.getText().toString().trim().isEmpty()) {
value = Double.parseDouble(mEditText.getText().toString());
// calculate
mTextView.setText(result + "");
}
}
}
@Override
public void onNothingSelected(AdapterView<?> parent) {
}
});
最佳答案
您可以使用此方法将编辑文本和所选项目的文本放入TextView
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) {
if (!mEditText.getText().toString().trim().isEmpty()) {
value = Double.parseDouble(mEditText.getText().toString());
mTextView.setText(value + "" + mSpinner.getAdapter().getItem(mSpinner.getSelectedItemPosition()).toString());
}
}
@Override
public void afterTextChanged(Editable s) {
}
});
mSpinner.setOnItemSelectedListener(new AdapterView.OnItemSelectedListener() {
@Override
public void onItemSelected(AdapterView<?> parent, View view, int position, long id) {
if (mMapUnit.containsKey(lengthKey[position])) {
if (!mEditText.getText().toString().trim().isEmpty()) {
value = Double.parseDouble(mEditText.getText().toString());
// calculate
mTextView.setText(value + "" + mSpinner.getAdapter().getItem(position).toString());
}
}
}
@Override
public void onNothingSelected(AdapterView<?> parent) {
}
});
上面代码的一点解释:
我想你知道适配器是什么,不过我还是要解释一下; 适配器是一个对象,它包含需要在 View (在本例中为 Spinner)中显示的信息。
该适配器附加到 Spinner View ,并通过调用方法 mSpinner .getAdapter()
您将获得连接到 Spinner 的适配器实例。 因为 Spinner 与适配器大量协同工作,所以 Spinner 中的项目位置将与适配器中的位置相同。
因此您可以调用 mSpinner.getAdapter().getItem(position); 获取位置 position 上的项目。
然后您应该看到适配器对 ListTypes 使用了什么。如果它是一个字符串,你可以这样做
String itemText = ((String) mSpinner.getAdapter().getItem(position) ) ;
当 onTextChanged 回调被调用时,EditText 的文本改变(或被改变)并且它不考虑 Spinner。所以你得不到 Spinner 的参数(比如当前位置或 id)。因此,您需要按照上面的说明手动获取它。
调用 OnItemSelected 回调时,Spinner 发生了变化,您现在可能已经猜到了,这次我们确实有我已经谈到的那些参数。因此您不需要获取所选项目(这很危险,因为 Spinner 仍然可以处理更改,并且 Spinner 的 selectedItem 可能与回调提供的位置不同)
所以必须使用回调的position参数。
由于找不到“result”变量,我假设您指的是 OnItemSelectedListener 中的“value”变量。
祝你好运!
关于android - 如果 Spinner 或 EditText 更改,则更改 TextView,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31771542/