- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
对于我的 android 应用程序,每次 RadioButton
切换状态时,我都需要更改 textChangedListener
。有 4 个可能的按钮,每个按钮都有一个相应的 EditText
框。我目前只实现了 4 个按钮中的 2 个,当我从一个已实现的按钮(即按钮 1)切换到一个未实现的按钮时,没有问题。但是,当我尝试选择另一个已实现的按钮(即按钮 2)时,应用程序崩溃了。
下面是我的一些代码,显示了我的 textChangedListener
的实现。
public TextWatcher last;
public TextWatcher _list1;
public TextWatcher _list2;
public EditText active;
public RadioButton checked;
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.main);
final EditText t1 = (EditText) findViewById(R.id.1text);
final EditText t2 = (EditText) findViewById(R.id.2text);
final EditText t3 = (EditText) findViewById(R.id.3text);
final EditText t4 = (EditText) findViewById(R.id.4text);
final RadioGroup g1 = (RadioGroup) findViewById(R.id.radioGroup1);
g1.setOnCheckedChangeListener(new OnCheckedChangeListener() {
public void onCheckedChanged(RadioGroup group, int checkedId) {
checked = (RadioButton)g1.findViewById(g1.getCheckedRadioButtonId());
if (((String) checked.getText()).equalsIgnoreCase("But1"))
{
active.removeTextChangedListener(last);
active = t1;
active.setText("");
active.addTextChangedListener(_list1);
last = _list1;
}
else if (((String) checked.getText()).equalsIgnoreCase("But2"))
{
active.removeTextChangedListener(last);
active = t2;
active.setText("");
active.addTextChangedListener(_list2);
last = _list2;
}
else if (((String) checked.getText()).equalsIgnoreCase("But3"))
{
active = t3;
}
else if (((String) checked.getText()).equalsIgnoreCase("But4"))
{
active = t4;
}
}
});
checked = (RadioButton)g1.findViewById(g1.getCheckedRadioButtonId());
active = t1;
active.setText("");
_list1 = (new TextWatcher(){
public void afterTextChanged(Editable s) {}
public void beforeTextChanged(CharSequence s, int start, int count, int after){}
public void onTextChanged(CharSequence s, int start, int before, int count)
{
%Useful stuff
}
});
_list2 = (new TextWatcher(){
public void afterTextChanged(Editable s) {}
public void beforeTextChanged(CharSequence s, int start, int count, int after){}
public void onTextChanged(CharSequence s, int start, int before, int count)
{
%Different useful stuff
}
});
active.addTextChangedListener(_list1);
last = _list1;
}
同样,我的问题是,当我尝试从一个 TextChangedListener
切换到另一个时,无论每个监听器中实现了什么,我的应用程序都会崩溃。对于 TextChangeListener
的特性和实现,我觉得有一些非常明显的东西被我忽略了。任何帮助将不胜感激!
谢谢!
我的错误日志:(注意: Activity 名称是“Number”)
01-31 08:29:17.673: INFO/ActivityManager(59): Displayed activity com.ikiar.engtools/.Number: 659 ms (total 659 ms)
01-31 08:29:24.083: DEBUG/AndroidRuntime(276): Shutting down VM
01-31 08:29:24.083: WARN/dalvikvm(276): threadid=1: thread exiting with uncaught exception (group=0x4001d800)
01-31 08:29:24.103: ERROR/AndroidRuntime(276): FATAL EXCEPTION: main
01-31 08:29:24.103: ERROR/AndroidRuntime(276): java.lang.ClassCastException: android.text.SpannableStringBuilder
01-31 08:29:24.103: ERROR/AndroidRuntime(276): at com.ikiar.engtools.Number$3.onTextChanged(Number.java:122)
01-31 08:29:24.103: ERROR/AndroidRuntime(276): at android.widget.TextView.sendOnTextChanged(TextView.java:6131)
01-31 08:29:24.103: ERROR/AndroidRuntime(276): at android.widget.TextView.setText(TextView.java:2691)
01-31 08:29:24.103: ERROR/AndroidRuntime(276): at android.widget.TextView.setText(TextView.java:2556)
01-31 08:29:24.103: ERROR/AndroidRuntime(276): at android.widget.EditText.setText(EditText.java:75)
01-31 08:29:24.103: ERROR/AndroidRuntime(276): at android.widget.TextView.setText(TextView.java:2531)
01-31 08:29:24.103: ERROR/AndroidRuntime(276): at com.ikiar.engtools.Number$1.onCheckedChanged(Number.java:71)
01-31 08:29:24.103: ERROR/AndroidRuntime(276): at android.widget.RadioGroup.setCheckedId(RadioGroup.java:172)
01-31 08:29:24.103: ERROR/AndroidRuntime(276): at android.widget.RadioGroup.access$600(RadioGroup.java:52)
01-31 08:29:24.103: ERROR/AndroidRuntime(276): at android.widget.RadioGroup$CheckedStateTracker.onCheckedChanged(RadioGroup.java:342)
01-31 08:29:24.103: ERROR/AndroidRuntime(276): at android.widget.CompoundButton.setChecked(CompoundButton.java:127)
01-31 08:29:24.103: ERROR/AndroidRuntime(276): at android.widget.CompoundButton.toggle(CompoundButton.java:86)
01-31 08:29:24.103: ERROR/AndroidRuntime(276): at android.widget.RadioButton.toggle(RadioButton.java:69)
01-31 08:29:24.103: ERROR/AndroidRuntime(276): at android.widget.CompoundButton.performClick(CompoundButton.java:98)
01-31 08:29:24.103: ERROR/AndroidRuntime(276): at android.view.View$PerformClick.run(View.java:8816)
01-31 08:29:24.103: ERROR/AndroidRuntime(276): at android.os.Handler.handleCallback(Handler.java:587)
01-31 08:29:24.103: ERROR/AndroidRuntime(276): at android.os.Handler.dispatchMessage(Handler.java:92)
01-31 08:29:24.103: ERROR/AndroidRuntime(276): at android.os.Looper.loop(Looper.java:123)
01-31 08:29:24.103: ERROR/AndroidRuntime(276): at android.app.ActivityThread.main(ActivityThread.java:4627)
01-31 08:29:24.103: ERROR/AndroidRuntime(276): at java.lang.reflect.Method.invokeNative(Native Method)
01-31 08:29:24.103: ERROR/AndroidRuntime(276): at java.lang.reflect.Method.invoke(Method.java:521)
01-31 08:29:24.103: ERROR/AndroidRuntime(276): at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:868)
01-31 08:29:24.103: ERROR/AndroidRuntime(276): at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:626)
01-31 08:29:24.103: ERROR/AndroidRuntime(276): at dalvik.system.NativeStart.main(Native Method)
01-31 08:29:24.113: WARN/ActivityManager(59): Force finishing activity com.ikiar.engtools/.Number
01-31 08:29:24.523: INFO/ARMAssembler(59): generated scanline__00000077:03515104_00000000_00000000 [ 33 ipp] (47 ins) at [0x3659b0:0x365a6c] in 365498 ns
01-31 08:29:24.653: WARN/ActivityManager(59): Activity pause timeout for HistoryRecord{450232b0 com.ikiar.engtools/.Number}
最佳答案
我认为您的布局文件中存在一些问题。
我编辑了代码并创建了 main.xml 并将 EditText id 从 1text、2text、3text、4text 更改为 text1、text2、text3、text4
下面给出的代码有效。
Activity 代码如下
public TextWatcher last;
public TextWatcher _list1;
public TextWatcher _list2;
public EditText active;
public RadioButton checked;
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.main);
final EditText t1 = (EditText) findViewById(R.id.text1);
final EditText t2 = (EditText) findViewById(R.id.text2);
final EditText t3 = (EditText) findViewById(R.id.text3);
final EditText t4 = (EditText) findViewById(R.id.text4);
final Context c = getApplicationContext();
final RadioGroup g1 = (RadioGroup) findViewById(R.id.radioGroup1);
g1.setOnCheckedChangeListener(new OnCheckedChangeListener() {
public void onCheckedChanged(RadioGroup group, int checkedId) {
checked = (RadioButton) g1.findViewById(g1.getCheckedRadioButtonId());
if (((String) checked.getText()).equalsIgnoreCase("But1")) {
active.removeTextChangedListener(last);
active = t1;
active.setText("");
active.addTextChangedListener(_list1);
last = _list1;
} else if (((String) checked.getText()).equalsIgnoreCase("But2")) {
active.removeTextChangedListener(last);
active = t2;
active.setText("");
active.addTextChangedListener(_list2);
last = _list2;
} else if (((String) checked.getText()).equalsIgnoreCase("But3")) {
active = t3;
} else if (((String) checked.getText()).equalsIgnoreCase("But4")) {
active = t4;
}
}
});
checked = (RadioButton) g1.findViewById(g1.getCheckedRadioButtonId());
active = t1;
active.setText("");
_list1 = (new TextWatcher() {
public void afterTextChanged(Editable s) {
}
public void beforeTextChanged(CharSequence s, int start, int count, int after) {
}
public void onTextChanged(CharSequence s, int start, int before, int count) {
Toast.makeText(c, "onTextChanged called(_list1 watcher)", Toast.LENGTH_SHORT).show();
}
});
_list2 = (new TextWatcher() {
public void afterTextChanged(Editable s) {
}
public void beforeTextChanged(CharSequence s, int start, int count, int after) {
}
public void onTextChanged(CharSequence s, int start, int before, int count) {
Toast.makeText(c, "onTextChanged called(_list2 watcher)", Toast.LENGTH_SHORT).show();
}
});
active.addTextChangedListener(_list1);
last = _list1;
}
}
以下是main.xml文件的代码
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="fill_parent"
android:layout_height="fill_parent"
android:orientation="vertical" >
<RadioGroup
android:id="@+id/radioGroup1"
android:layout_width="match_parent"
android:layout_height="wrap_content" >
<RadioButton
android:id="@+id/But1"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="But1" />
<EditText
android:id="@+id/text1"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:inputType="text" />
<RadioButton
android:id="@+id/But2"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="But2" />
<EditText
android:id="@+id/text2"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:inputType="text" />
<RadioButton
android:id="@+id/But3"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="But3" />
<EditText
android:id="@+id/text3"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:inputType="text" />
<RadioButton
android:id="@+id/But4"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="But4" />
<EditText
android:id="@+id/text4"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:inputType="text" >
</EditText>
</RadioGroup>
</LinearLayout>
试试这个。它的工作。
关于java - 如何替换 Activity 中的 textChangedListener,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9074045/
我尝试仅在填充表单中的每个字段后启用按钮。为此,我使用了 TextWatcher,但我不断收到错误。 这可能与我的 contentView 为 Activity_add_grade 而我的按钮和字段位
我正在尝试使用 TextChangedListener 在我的 ListView 上实现搜索功能。但是在 EditText 中添加了一些字符之后; ListView 变为空白。我在我的 ArrayAd
我正在尝试将 TextChangedListener 添加到我的 EditText: statusText = (EditText) findViewById(R.id.statusT
在 Xamarin 中,我可以为 EditText 对象的 TextChangedListener 编写一些代码吗? 这是我目前所拥有的: public class InputTextWatcher
所以我一直在尝试为 Android 实现 TextWatcher 并遇到了一些问题,因为我想将 EditText 小部件中的文本转换为货币格式的字符串,多次调用 TextChangedListener
我在运行这段特定代码时遇到 StackOverflow 错误: litera.addTextChangedListener(new TextWatcher(){ public
我使用 AddTextChangedListener 来编辑文本: edit_text.AddTextChangedListener(new NumberTextWatcher()); 现在我想删除
对于我的 android 应用程序,每次 RadioButton 切换状态时,我都需要更改 textChangedListener。有 4 个可能的按钮,每个按钮都有一个相应的 EditText 框。
通过阅读 Android 文档,我了解到无法将 addTextChangedListener 用于 Spinner,但是我是否缺少替代方案? 我已经创建了许多表单,并且我想在有未保存的更改时通知用户(
假设我想从编辑文本中删除一些不好的词。父亲叔叔表哥 King 会被 F**K... 但问题是,如果我更改文本,它会再次更改处理程序。任何人都知道解决方案。请帮忙。代码在那里。 search_name.
我有一个 Activity ,其中有一个 viewpager 和 4 个 fragments 作为页面。 在其中一个 fragment 中我需要处理后退按钮按下,所以我这样做: public void
大家好,我是 RetroLambda 的新手。现在我将它与 Runnable、OnClickListener 等一起使用。问题是:是否可以将 RetroLambda 与 onTextChangeLis
我试图将编辑文本值限制为小于或等于 130。在 onCreate 方法中,我执行了以下操作: final EditText expectedYears = (EditText)findViewById
我试图创建一个自动计算百分比的应用程序。百分比值将显示在 TextView 中。 TextView 中显示的值将基于用户在编辑文本中输入的值。 我已经完成了该程序的代码创建,但是每次我尝试在编辑文本中
我知道我们可以使用 addTextChangedListener 将 TextWatcher 添加到 EditTexts 并使用 removeTextChangedListener 将其删除。但现在我
我是 android 编程的新手。我遇到了一个问题,我很难应用本主题中给出的解决方案: How to format the input of EditText when typing with tho
我正在创建一个包含 EditText 的类,当此 EditText 更改时,我将值存储在此类的一个变量中。 但是我在另一个类中也需要这个值,并且我想在每次 EditText 更改时更新这个值。 那么这
如何在 TextChangedListener 中获取 EditText 的父 View ?我想在文本更改时获取其父 View 的标签。 由于 Button.OnClick() 直接将 View 作为
我有带有自定义适配器的旅行者列表,其中包含两个 EditText - edtFirstName 和 edtLastName。我希望当用户输入文本时将更改保存到列表,并在单击下一个按钮时将此列表发送到另
我是 Android 和 Java 编程的新手,最近遇到了一个问题。我一直在寻找几个小时的答案,但我没有成功。我有一个自定义 ListView 和一个自定义适配器,其中一行包含一个 CheckBox
我是一名优秀的程序员,十分优秀!