我是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) {
}
});
Spinner代码:
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) {
}
});
答案 0 :(得分:0)
你可以简单地使用布尔变量来检查EditText或Spinner的条件。 为Spinner和EditText创建默认值为false的boolean。 在TextWatcher的afterTextChanged子方法中,在Spinner中将其布尔值设置为true,在另一侧(Spinner和EditText)中检查它。
也许这个帮助。
答案 1 :(得分:0)
您可以使用此方法将文本文本和所选项目放在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) {
}
});
对上述代码的一点解释:
我想你知道适配器是什么,但我会解释它; 适配器是一个对象,它包含需要在视图中显示的信息(在本例中为Spinner)。
该适配器附加到Spinner视图,并通过调用该方法 mSpinner .getAdapter()
您将获得附加到Spinner的适配器的实例。 由于Spinner与适配器一起大量工作,因此Spinner中项目的位置将位于适配器中的相同位置。
所以你可以调用mSpinner.getAdapter() .getItem(position); 来获取位置位置的项目。
然后您应该看到适配器用于ListTypes的内容。如果它是一个字符串你可以做
String itemText = ((String) mSpinner.getAdapter()。getItem(position));
当调用onTextChanged回调时,EditText的文本会发生更改(或更改),并且不会考虑Spinner。所以你没有获得Spinner的参数(例如当前位置或id)。因此,您需要通过上面的解释手动获取它。
当调用OnItemSelected回调时,Spinner发生了变化,正如您现在可能猜到的那样,这次我们确实有了我所谈到的那些参数。因此,您不需要获取所选项(这很危险,因为Spinner仍然可以处理更改,并且微调器的selectedItem可能与回调提供的位置不同)
所以你必须使用回调的position参数。
由于我找不到“result”变量,我假设您在OnItemSelectedListener中表示“value”变量。
古德勒克!