Search code examples
androidandroid-alertdialog

Cannot get change TextView in custom listView to user input from editText in alertDialog


I want the user to input text from edit text in an alertDialog and have the text view in my list view update to that input. It seems to work only if I don't input anything into the edit text which changes the textView to blank, but if there is input nothing happens, strange.

this is the adapter class I am working in:

import android.content.Context;
import android.content.DialogInterface;
import android.support.annotation.NonNull;
import android.support.v7.app.AlertDialog;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;
import android.widget.ArrayAdapter;
import android.widget.EditText;
import android.widget.ImageButton;
import android.widget.ImageView;
import android.widget.TextView;

import java.util.ArrayList;

import static com.example.emilythacker.chorelist.R.id.textView_ID;



class CustomAdapter extends ArrayAdapter{

    public CustomAdapter(Context context, ArrayList choreText) {
        super(context, R.layout.custon_listview_row, choreText);
    }

    @NonNull
    @Override
    public View getView(int position, View convertView, ViewGroup parent) {
        LayoutInflater myInflater = LayoutInflater.from(getContext());
        View customView = myInflater.inflate(R.layout.custon_listview_row, parent, false);


        ImageButton imageButton = (ImageButton) customView.findViewById(R.id.imageButton_ID);
        final TextView textView = (TextView) customView.findViewById(textView_ID);

        textView.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {
                //what happens when textView is clicked
                AlertDialog alertDialog = new AlertDialog.Builder(getContext()).create();
                final EditText input = new EditText(getContext());
                input.setHint("hint");
                alertDialog.setView(input);
                alertDialog.setTitle("Set Chore");
                alertDialog.setMessage("Alert message to be shown");
                alertDialog.setButton(AlertDialog.BUTTON_NEUTRAL, "OK", new DialogInterface.OnClickListener() {
                            public void onClick(DialogInterface dialog, int which) {

                                //this will set text to "hello" only if user does not enter anything into input
                                textView.setText("hello");

                                //this also will only work if there is no input entered into input...which will change textView into empty space
                                //textView.setText(input.getText().toString());

                                //works the same with or without dialog.dismiss();
                                dialog.dismiss();
                            }
                        });
                alertDialog.show();

            }
        });



        imageButton.setImageResource(R.drawable.clock);

        return customView;
    }
}

here is the xml for each row in my list view if it helps-

<?xml version="1.0" encoding="utf-8"?>
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:app="http://schemas.android.com/apk/res-auto"
    android:orientation="horizontal" android:layout_width="match_parent"
    android:layout_height="60dp">

    <ImageButton
        android:layout_width="60dp"
        android:scaleType="fitCenter"
        app:srcCompat="@drawable/clock"
        android:id="@+id/imageButton_ID"
        android:layout_height="60dp"
        android:background="@null"
        android:layout_alignParentRight="true"
        android:padding="5dp"
        android:layout_weight="1" />


    <TextView
        android:text="Click here to add chore"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:ems="10"
        android:id="@+id/textView_ID"
        android:textSize="25dp"
        android:layout_centerVertical="true"
        android:layout_toStartOf="@+id/imageButton_ID"
        android:layout_marginEnd="11dp"
        />


</RelativeLayout>

Solution

  • The keyboard pop-up is causing your listview to be refreshed. In your manifest, you have to add a line of code in the activity that is holding your adapter:

    <activity android:name=".Your_Activity" android:windowSoftInputMode="adjustNothing"> //add this line

    Hope your problem is gone :)