Search code examples
androidnullpointerexceptionandroid-edittextpopupwindowtextwatcher

addTextChangedListener() on EditText in a popupwindow android


I'm trying to have a popupwindow where I can change a delay between from which I press a button til where an image is shown up. I've read that edittext and textwatcher should to the trick but I keep getting a NullPointerExeption.

This is the part where you are in the settings and trying to set the delay.

else if(id == R.id.action_settings){
        LayoutInflater layoutInflater  = (LayoutInflater)getBaseContext().getSystemService(LAYOUT_INFLATER_SERVICE);
        View setpopView = layoutInflater.inflate(R.layout.setpop, null);
        final PopupWindow setpopWindow = new PopupWindow(setpopView,LayoutParams.WRAP_CONTENT, LayoutParams.WRAP_CONTENT);

        setpopWindow.setFocusable(true);
        setpopWindow.update();

        EditText delayTime = (EditText) setpopView.findViewById(R.id.editText1);
        delayTime.setText("" + timerTime);
        timerTime = Integer.parseInt(delayTime.getText().toString());

        delayTime.addTextChangedListener(new TextWatcher() {

            EditText delayTime = (EditText) findViewById(R.id.editText1);

              public void afterTextChanged(Editable s) {
                    delayTime.setText("" + timerTime);
              }

              public void beforeTextChanged(CharSequence s, int  start, int count, int after) {
                    //TODO Auto-generated method stub
              }

              public void onTextChanged(CharSequence s, int start, int before, int count) {
                   //TODO Auto-generated method stub
              }
        });


        ((TextView)setpopWindow.getContentView().findViewById(R.id.textDelay2)).setText("Current delay: " + timerTime + "sec");


        Button btnDismiss = (Button)setpopView.findViewById(R.id.setDismiss);
        btnDismiss.setOnClickListener(new Button.OnClickListener(){
            @Override
            public void onClick(View v){
                //TODO Auto-generated method stub
                setpopWindow.dismiss();
            }
        });  
        setpopWindow.showAsDropDown(btnDismiss, 50, 50);
    }

xml

<?xml version="1.0" encoding="utf-8"?>
<RelativeLayout android:layout_width="fill_parent"
android:layout_height="fill_parent"
android:layout_centerHorizontal="true"
android:layout_centerVertical="true"
android:layout_margin="5dp"
android:background="@android:color/black"
android:orientation="vertical"
xmlns:android="http://schemas.android.com/apk/res/android">

<RelativeLayout
    android:layout_width="230dp"
    android:layout_height="300dp"
    android:layout_centerHorizontal="true"
    android:layout_centerVertical="true"
    android:layout_margin="2dp"
    android:background="@android:color/darker_gray"
    android:orientation="vertical" >

    <Button
        android:id="@+id/setDismiss"
        android:layout_width="100dp"
        android:layout_height="50dp"
        android:layout_alignParentBottom="true"
        android:layout_alignParentRight="true"
        android:text="Back" />

    <RelativeLayout
        android:id="@+id/relativeLayout1"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_margin="20dp"
        android:orientation="vertical" >

        <TextView
            android:layout_width="fill_parent"
            android:layout_height="wrap_content"
            android:text="         Settings"
            android:textSize="22sp" />
    </RelativeLayout>

    <TextView
        android:id="@+id/textView1"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_below="@+id/seekBar"
        android:layout_centerHorizontal="true"
        android:layout_marginTop="27dp"
        android:text="" />

    <TextView
        android:id="@+id/textDelay"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_alignLeft="@+id/relativeLayout1"
        android:layout_below="@+id/relativeLayout1"
        android:text="Set result delay (sec)" />

    <EditText
        android:id="@+id/editText1"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_below="@+id/textDelay"
        android:layout_centerHorizontal="true"
        android:ems="10"
        android:inputType="number"
        android:text=""  >

        <requestFocus />
    </EditText>

    <TextView
        android:id="@+id/textDelay2"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_alignLeft="@+id/textDelay"
        android:layout_below="@+id/editText1"
        android:layout_marginTop="16dp"
        android:text="" />

</RelativeLayout>

LogCat

11-10 03:30:00.776: E/AndroidRuntime(30751): FATAL EXCEPTION: main
11-10 03:30:00.776: E/AndroidRuntime(30751): Process: com.gerfort.gerfortrps, PID: 30751
11-10 03:30:00.776: E/AndroidRuntime(30751): java.lang.NullPointerException: Attempt to invoke virtual method 'void android.widget.TextView.setText(java.lang.CharSequence)' on a null object reference
11-10 03:30:00.776: E/AndroidRuntime(30751):    at com.gerfort.gerfortrps.MainActivity$14.afterTextChanged(MainActivity.java:413)
11-10 03:30:00.776: E/AndroidRuntime(30751):    at android.widget.TextView.sendAfterTextChanged(TextView.java:7472)
11-10 03:30:00.776: E/AndroidRuntime(30751):    at android.widget.TextView$ChangeWatcher.afterTextChanged(TextView.java:9246)
11-10 03:30:00.776: E/AndroidRuntime(30751):    at android.text.SpannableStringBuilder.sendAfterTextChanged(SpannableStringBuilder.java:957)
11-10 03:30:00.776: E/AndroidRuntime(30751):    at android.text.SpannableStringBuilder.replace(SpannableStringBuilder.java:501)
11-10 03:30:00.776: E/AndroidRuntime(30751):    at android.text.SpannableStringBuilder.delete(SpannableStringBuilder.java:216)
11-10 03:30:00.776: E/AndroidRuntime(30751):    at android.text.SpannableStringBuilder.delete(SpannableStringBuilder.java:33)
11-10 03:30:00.776: E/AndroidRuntime(30751):    at android.view.inputmethod.BaseInputConnection.deleteSurroundingText(BaseInputConnection.java:243)
11-10 03:30:00.776: E/AndroidRuntime(30751):    at com.android.internal.view.IInputConnectionWrapper.executeMessage(IInputConnectionWrapper.java:382)
11-10 03:30:00.776: E/AndroidRuntime(30751):    at com.android.internal.view.IInputConnectionWrapper$MyHandler.handleMessage(IInputConnectionWrapper.java:77)
11-10 03:30:00.776: E/AndroidRuntime(30751):    at android.os.Handler.dispatchMessage(Handler.java:102)
11-10 03:30:00.776: E/AndroidRuntime(30751):    at android.os.Looper.loop(Looper.java:135)
11-10 03:30:00.776: E/AndroidRuntime(30751):    at android.app.ActivityThread.main(ActivityThread.java:5070)
11-10 03:30:00.776: E/AndroidRuntime(30751):    at java.lang.reflect.Method.invoke(Native Method)
11-10 03:30:00.776: E/AndroidRuntime(30751):    at java.lang.reflect.Method.invoke(Method.java:372)
11-10 03:30:00.776: E/AndroidRuntime(30751):    at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:836)
11-10 03:30:00.776: E/AndroidRuntime(30751):    at      com.android.internal.os.ZygoteInit.main(ZygoteInit.java:631)

It keeps crashing when I try to edit the text. Any ideas? Thanks in advance!


Solution

  • Try like this

    final EditText delayTime = (EditText) setpopView.findViewById(R.id.editText1);
    delayTime.setText(String.valueOf(timerTime));
    timerTime = Integer.parseInt(delayTime.getText().toString());
    
    delayTime.addTextChangedListener(new TextWatcher() {
    
          public void afterTextChanged(Editable s) {
               if(!s.toString().trim().equalsIgnoreCase("")) {
                   timerTime = Integer.parseInt(s.toString().trim());
                   //delayTime.setText(String.valueOf(timerTime));
               } else {
                   timerTime = 0;//set initial value of timerTime
                   //delayTime.setText(String.valueOf(timerTime));
               }                
          }
    
          public void beforeTextChanged(CharSequence s, int  start, int count, int after) {
                //TODO Auto-generated method stub
          }
    
          public void onTextChanged(CharSequence s, int start, int before, int count) {
               //TODO Auto-generated method stub
          }
    });