Ryder Thacker
Ryder Thacker

Reputation: 1482

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>

Upvotes: 0

Views: 81

Answers (2)

Sudip Podder
Sudip Podder

Reputation: 838

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 :)

Upvotes: 1

Ish
Ish

Reputation: 304

I don't see you retrieving the value from your editText and assigning it to your textView. Update your public getView() function like this:

@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);

    String text;

    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) {

                           text = input.getText().toString();

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

                            //this also will only work if there is no input  entered into input...wich 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;
}

Tell me if it helps.

Upvotes: 0

Related Questions