How to use EditText onTextChanged event when I press the number?
You have selected correct approach. You have to extend the class with TextWatcher and override afterTextChanged()
,beforeTextChanged()
, onTextChanged()
.
You have to write your desired logic in afterTextChanged()
method to achieve functionality needed by you.
How to Apply the Textchange event on EditText
I think you are receiving empty String " "
which is causing this problem. Make sure you get a non-empty String from your EditText
.
Consider your EditText
doesn't have any value typed in, and you are trying to get its value and convert into int you will run into this kind of problem.
edittext.addTextChangedListener(new TextWatcher() {
public void onTextChanged(CharSequence s, int start, int before,
int count) {
if(!s.equals("") ) {
//do your work here
}
}
public void beforeTextChanged(CharSequence s, int start, int count,
int after) {
}
public void afterTextChanged(Editable s) {
}
});
Also check this link for more idea,
https://stackoverflow.com/a/3377648/603744
android on Text Change Listener
You can add a check to only clear when the text in the field is not empty (i.e when the length is different than 0).
field1.addTextChangedListener(new TextWatcher() {
@Override
public void afterTextChanged(Editable s) {}
@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(s.length() != 0)
field2.setText("");
}
});
field2.addTextChangedListener(new TextWatcher() {
@Override
public void afterTextChanged(Editable s) {}
@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(s.length() != 0)
field1.setText("");
}
});
Documentation for TextWatcher
here.
Also please respect naming conventions.
Detecting an onTextChanged event in dot42
This would be a minimal implementation. I hope it helps you see a pattern in the difference between Java and C# - it is really trivial.
[Activity]
public class MainActivity : Activity, Android.Text.ITextWatcher
{
protected override void OnCreate(Bundle savedInstance)
{
base.OnCreate(savedInstance);
SetContentView(R.Layouts.MainLayout);
EditText editText = FindViewById<EditText>(R.Ids.status);
editText.AddTextChangedListener(this);
}
public void AfterTextChanged(Android.Text.IEditable s)
{
throw new NotImplementedException();
}
public void BeforeTextChanged(Java.Lang.ICharSequence s, int start, int count, int after)
{
throw new NotImplementedException();
}
public void OnTextChanged(Java.Lang.ICharSequence s, int start, int before, int count)
{
throw new NotImplementedException();
}
}
The interface implementation is generated by Visual Studio.
Proper method to change EditText contents in OnTextChanged event
You are doing the wrong way. Instead, use this in your EditText
:
<EditText
....
android:hint="Type to compose"/>
The OS will take care of removing that text, and you won't have to workaround that. Also, it will look prettier.
android edittext onchange listener
First, you can see if the user finished editing the text if the EditText
loses focus or if the user presses the done button (this depends on your implementation and on what fits the best for you).
Second, you can't get an EditText
instance within the TextWatcher
only if you have declared the EditText
as an instance object. Even though you shouldn't edit the EditText
within the TextWatcher
because it is not safe.
EDIT:
To be able to get the EditText
instance into your TextWatcher
implementation, you should try something like this:
public class YourClass extends Activity {
private EditText yourEditText;
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.main);
yourEditText = (EditText) findViewById(R.id.yourEditTextId);
yourEditText.addTextChangedListener(new TextWatcher() {
public void afterTextChanged(Editable s) {
// you can call or do what you want with your EditText here
// yourEditText...
}
public void beforeTextChanged(CharSequence s, int start, int count, int after) {}
public void onTextChanged(CharSequence s, int start, int before, int count) {}
});
}
}
Note that the above sample might have some errors but I just wanted to show you an example.
onTextChanged event doesn't work in Android
Maybe this helps:
if (!isChangedProgramatically) {
String num = editText.getText().toString();
if(!num.isEmpty()) {
String str = num.replace(",", "");
double x = Double.parseDouble(str);
String text = NumberFormat.getIntegerInstance(Locale.US).format(x);
isChangedProgramatically = true;
editText.setText(text);
}
} else {
editText.setSelection(editText.getText().length());
isChangedProgramatically = false;
}
isChangedProgramatically is a private boolean (default false) of your Activity.
How to handle Number Format Exception in edittext OntextChanged
When you remove everything on your editText, editText will return an empty string. Hence you will get NPE
and also Number Format Exception
.
You can handle like this:
if(!viewHolder.edt_product_qty.getText().toString().equals("")){
quantity_count= Integer.parseInt(viewHolder.edt_product_qty.getText().toString());
buyNowList(user_id,"UserCart",0,stList.get(position).getCartList1().getId(),stList.get(position).getCartList1().getProdSku(),stList.get(position).getCartList1().getProdId(),quantity_count,0,qty_status,stList.get(position).getCartList1().getProdPrice());
}
To compare initial value with current value
First you need to assign a variable as initial value in beforeTextChanged
.
initalValue =viewHolder.edt_product_qty.getText().toString();
Then in onTextChanged
:
if(!viewHolder.edt_product_qty.getText().toString().equals("")){
quantity_count = Integer.parseInt(viewHolder.edt_product_qty.getText().toString()); //
}if(initalValue>quantity_count)
{
// code
}else
{
//code
}
Have a look on this https://stackoverflow.com/a/20278708/5156075
android EditText - finished typing event
When the user has finished editing, s/he will press Done
or Enter
((EditText)findViewById(R.id.youredittext)).setOnEditorActionListener(
new EditText.OnEditorActionListener() {
@Override
public boolean onEditorAction(TextView v, int actionId, KeyEvent event) {
if (actionId == EditorInfo.IME_ACTION_SEARCH ||
actionId == EditorInfo.IME_ACTION_DONE ||
event != null &&
event.getAction() == KeyEvent.ACTION_DOWN &&
event.getKeyCode() == KeyEvent.KEYCODE_ENTER) {
if (event == null || !event.isShiftPressed()) {
// the user is done typing.
return true; // consume.
}
}
return false; // pass on to other listeners.
}
}
);
Related Topics
How to Retrieve HTML Content from Webview (As a String)
Setting Audio File as Ringtone
Multiple Apps Use Same Content Provider
Android Notification with Buttons on It
Failed to Launch Emulator: Error: Emulator Didn't Connect Within 60 Seconds
Change Date String Format in Android
Setting a Maximum Width on a Viewgroup
Change Device Language via Adb
Do Gcm Registration Id's Expire
Can Gradientcolor Be Used to Define a Gradient for a Fill or Stroke Entirely in Xml
Soft Keyboard Shows Up on Edittext Focus Only Once
How to Change Action Bar Actions Dynamically
Add an Image from Url into Custom Infowindow Google Maps V2
Why Is Calling Process.Killprocess(Process.Mypid()) a Bad Idea
Android Camera: Onactivityresult() Intent Is Null If It Had Extras