2016-12-27 87 views
0

我希望用户从alertDialog中的编辑文本输入文本,并让列表视图中的文本视图更新为该输入。它似乎只工作,如果我没有输入任何东西到编辑文本,它将textView更改为空白,但如果有输入什么也没有发生,奇怪。无法将自定义列表视图中的TextView更改为alertDialog中editText的用户输入

这是适配器类,我的工作在 -

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如果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> 

回答

1

键盘弹出导致您的listview被刷新。在你的清单,你必须添加一行代码在被牵着你的适配器的活动:

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

希望您的问题消失了:)

+0

它的工作原理!长期以来一直困扰着这个。谢谢 –

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

告诉我,如果它帮助。

+0

它没有工作。是否有与textView.setText(input.getText()。toString())之间的任何差异; ? –

相关问题