无法将自定义listView中的TextView更改为alertDialog中editText的用户输入

时间:2016-12-27 14:50:52

标签: android android-alertdialog

我希望用户在alertDialog中输入编辑文本中的文本,并让列表视图中的文本视图更新为该输入。它似乎只有在我没有在编辑文本中输入任何内容时才会起作用,这会将textView更改为空白,但是如果有输入则没有任何反应,很奇怪。

这是我正在使用的适配器类 -

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...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;
    }
}

如果有帮助的话,这里是列表视图中每行的xml -

<?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>

2 个答案:

答案 0 :(得分:1)

键盘弹出窗口会导致列表视图刷新。在清单中,您必须在持有适配器的活动中添加一行代码:

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

希望你的问题消失了:)

答案 1 :(得分:0)

我没有看到您从editText中检索值并将其分配给textView。 像这样更新你的公共getView()函数:

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

告诉我它是否有帮助。