Calling an external function from within the oncreate function (Android) - java

This is my first time asking a question here, as most of the time I find the answer I need within these forums. However I've been searching for ages and have had no luck so thought I would just ask.
My issue is when I call an external function it throws an error "The method processInput()is undefined for the type new TextWatcher(){}" my code is as follows:
#Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
EditText myTextBox = (EditText) findViewById(R.id.screenDisplay);
myTextBox.addTextChangedListener(new TextWatcher() {
// Not used but required for method to work correctly
public void afterTextChanged(Editable s) {}
// Not used but required for method to work correctly
public void beforeTextChanged(CharSequence s, int start, int count, int after) {}
// Processing input as entered into screen
public void onTextChanged(CharSequence s, int start, int before, int count)
{
processInput();
}
});
}
and the external method I'm trying to call is processInput(){}. The code for the function wrapper is shown below:
public void ProcessInput(String input){}
Hopefully its not something silly like a missing bracket that I'm overlooking,
Thank you in advance.

processInput();
instead try some thing like this. Make sure function name starts with small letter.
public void onTextChanged(CharSequence s, int start, int before, int count)
{
ProcessInput(s.toString());
}

Related

Android: Call function if EditText has not been changed in x seconds

I have this app I'm working on, which sends requests to a server whenever text changes in the EditText. And it works fine as it is.
The problem is, that if I send a request every time the edittext changes, it will be a lot of requests in the end. And I don't want to use a "send" button.
I want something the works something like this:
If the user types in the edittext, some timer goes on. And if the timer reaches x seconds, it executes the request. But the timer resets if the user types again.
In this way, the request is only sent, once the user has stopped typing.
You might know some better way, and I'd be glad to hear it.
Thanks in advance :D
One method would be to use myEditText.addTextChangedListener(...) and use a TextWatcher to know when the text changes.
Then in the onTextChanged() method you can post a delayed runnable using a Handler to send the current text to your server if they don't type anything further.
Here is what this roughly looks like:
private Handler handler = new Handler();
private Runnable postToServerRunnable = new Runnable() {
#Override
public void run() {
// TODO: PUT CODE HERE TO HANDLE CURRENT VALUE OF EDIT TEXT AND SEND TO SERVER
}
};
private TextWatcher textWatcher = new TextWatcher() {
#Override
public void afterTextChanged(Editable arg0) {}
#Override
public void beforeTextChanged(CharSequence s, int start, int count, int after) {}
#Override
public void onTextChanged(CharSequence s, int start, int before, int count) {
// remove existing callback (timer reset)
handler.removeCallbacks(postToServerRunnable);
// 500 millisecond delay. Change to whatever delay you want.
handler.postDelayed(postToServerRunnable, 500);
}
};
There is this is method called EditText.edittext.addtextchangedlistener . add this listener to your edittext and override the methods like this.
#Override
public void onTextChanged(CharSequence s, int start, int before, int count) {
}
#Override
public void beforeTextChanged(CharSequence s, int start, int count,
int after) {
}
#Override
public void afterTextChanged(Editable s) {
called after the The complete Text is changed// this is what i think you should use
}
I hope this is helpful . ThankYou.

user input run time android

I am trying to build a simple converter code(convert feet to mtr) in Android. I am able to do this but only when user clicks some button. Now I want to modify it such that it starts to convert as and when the user gives input(Something like google converter). Is there any way to do this in Android?
Thanks in advance.
Add the listener to your edittext:
yourEditText.addTextChangedListener(addTextWatcher);
Add the TextWatcher interface:
private TextWatcher addTextWatcher = new TextWatcher() {
#Override
public void onTextChanged(CharSequence sequence, int start, int before, int count) {
// here is where you could grab the contents of the edittext
// input each time a character is entered, and pass the value
// off to your unit conversion code. Careful to check for
// numerals/decimals only, or to set the proper inputType in
// your xml.
}
#Override
public void beforeTextChanged(CharSequence sequence, int start, int count, int after) {
}
#Override
public void afterTextChanged(Editable sequence) {
}
};

Android Studio : Converting numbers in real time

For AndroidStudio, I am creating a simple conversion app that allows you to convert kilometres to miles and vice versa. I am able to convert it by clicking a button, but how would you do it in real time? For example, as I am typing the number, it converts it right away in a different textbox.
This is the code for my onClick method that I created for my button:
public void onClick(View vw){
EditText value = (EditText)findViewById(R.id.editText);
double total = Double.parseDouble(value.getText().toString()) * 0.621371192;
TextView obj = (TextView)findViewById(R.id.milesDisplay);
obj.setText(Double.toString(total));
obj.setVisibility(View.VISIBLE);
}
You can do this if you're using an 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) {
// Every time you hit a number, capture the number and convert it
}
#Override
public void afterTextChanged(Editable s) {
}
});
inside onTextChanged a listener is trigged every time you hit the keyboard. Force it to only accept numbers.

MultiAutocompleteTextView events

I'm trying to work with a MultiAutocompleteTextView in such way that whenever I type a character in the textview, an event will be fired OR after 2-3 elements have been typed, fire the event again.
The reason I work with multiautocomplete is because I also need the autocompletion feature .
Is there such an event that can be triggered after every character or 2-3 characters typed? Thanks!
Yes you can use add a TextWatcher and TextChangedListener to your edit Text like this:
myEditText.addTextChangedListener(new TextWatcher() {
#Override
public void onTextChanged(CharSequence s, int start, int before, int count) {
//check count or count in edit text and do something
}
#Override
public void afterTextChanged(Editable arg0) {
}
#Override
public void beforeTextChanged(CharSequence s, int start, int count, int after) {
}
});
http://developer.android.com/reference/android/text/TextWatcher.html

Is there a built in method, InputType, or other clever way to cause an Android EditText widget to refuse to accept commas?

I am creating a comma seperated file and don't want to give the user a way to confuse the app.
Following what RoToRa said, you can delimitate the file using tabs instead.
If you do want to disallow commas, you can add a TextWatcher to modify the string before it is posted to the GUI:
EditText text;
private void foo()
{
text.addTextChangedListener(new TextWatcher()
{
public void onTextChanged(CharSequence s, int start, int before, int count)
{
}
public void beforeTextChanged(CharSequence s, int start, int count, int after)
{
}
public void afterTextChanged(Editable s)
{
// modify string here
}
});
}
Just check the addTextChangedListener(TextWatcher watcher) method - add the listener, which will check the editText field when it changes.

Categories