2017-11-05 4 views
1

Das ist also ein anderes Problem, das schon millionenfach angesprochen wurde, aber ich mache immer noch etwas falsch. EditText.getText() gibt eine leere Zeichenfolge zurück.EditText.getText() gibt einen leeren String zurück

Ich mache das in einem kleinen benutzerdefinierten Dialog, den ich gemacht habe. Ich erstelle es mit dem AlertDialog Builder, der das Problem verursachen könnte? Ich weiß es wirklich nicht.

Einige Dinge, die ich habe versucht,/Hinweise auf das, was ich weiß, über das Thema:

  • Ich bin für Text in der OK-Taste des Klick-Listener Überprüfung, so versuche ich, nicht um einen Wert zu erhalten bevor es einen gab, was ein häufiger Fehler war, den ich sah.

  • Ich habe IDs für die EditText-Objekte in meinem XML festgelegt und der Debugger scheint zu zeigen, dass ich sie richtig referenziere.

  • Ich habe versucht, die EditText-Objekte außerhalb der onCreateDialog-Methode zu definieren, und das hat die Dinge nicht geändert (obwohl ich neugierig bin, was besser ist).

  • Mit EditText.setText() before getText() wird es ermöglichen, das in setText() verwendete Argument zurückgeben, aber es scheint nicht zu einem Wert vom Benutzer abgerufen werden.

Hier ist meine benutzerdefinierte Dialog Fragment:

public class GPSLocationDialogFragment extends DialogFragment { 

    @Override 
    public Dialog onCreateDialog(Bundle savedInstanceState) { 

     AlertDialog.Builder builder = new AlertDialog.Builder(getActivity()); 

     LayoutInflater inflater = getActivity().getLayoutInflater(); 
     final View view = inflater.inflate(R.layout.gps_dialog, null); 

     final EditText latitudeText = (EditText) view.findViewById(R.id.latitude); 
     final EditText longitudeText = (EditText) view.findViewById(R.id.longitude); 

     // Define the dialog 
     builder.setView(inflater.inflate(R.layout.gps_dialog, null)) 
       .setMessage("Manually input a GPS address") 

       .setPositiveButton("OK", new DialogInterface.OnClickListener() { 
        public void onClick(DialogInterface dialog, int id) { 

         Log.d("myTag", "Text: " + latitudeText.getText()); // This prints "" 

         // These throw errors since they're trying to parse "" as a double 
         double latitude = Double.parseDouble(latitudeText.getText().toString()); 
         double longitude = Double.parseDouble(longitudeText.getText().toString()); 
        } 
       }) 

       .setNegativeButton("Cancel", new DialogInterface.OnClickListener() { 
        public void onClick(DialogInterface dialog, int id) { 

         dialog.cancel(); 
        } 
       }); 

     // Create the AlertDialog object and return it 
     return builder.create(); 
    } 
} 

Hier ist, wie ich den Dialog aus meiner Tätigkeit bin Aufruf:

GPSLocationDialogFragment gpsDialog = new GPSLocationDialogFragment(); 

gpsDialog.show(getFragmentManager(), "GPSDialog"); 

Und hier ist mein Layout .xml:

<?xml version="1.0" encoding="utf-8"?> 
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" 
    android:orientation="vertical" android:layout_width="match_parent" 
    android:layout_height="match_parent"> 

    <EditText 
     android:id="@+id/longitude" 
     android:layout_width="match_parent" 
     android:layout_height="match_parent" 
     android:layout_marginTop="16dp" 
     android:layout_marginBottom="4dp" 
     android:layout_marginLeft="16dp" 
     android:layout_marginRight="16dp" 
     android:hint="@string/longitude" 
     android:inputType="numberSigned|numberDecimal" /> 
    <EditText 
     android:id="@+id/latitude" 
     android:layout_width="match_parent" 
     android:layout_height="match_parent" 
     android:layout_marginTop="16dp" 
     android:layout_marginBottom="4dp" 
     android:layout_marginLeft="16dp" 
     android:layout_marginRight="16dp" 
     android:hint="@string/latitude" 
     android:inputType="numberSigned|numberDecimal" /> 
</LinearLayout> 

Wenn mehr Kontext notwendig ist I kann es teilen, ich habe versucht, nur den relevanten Code zu vereinfachen.

Antwort

1

Versuchen Sie, diese zu ändern:

builder.setView(inflater.inflate(R.layout.gps_dialog, null)) 

dazu: geschieht

builder.setView(view) 

Was ist, dass Sie gps_dialog xml aufzublasen und seine Layout-Hierarchie in einer Ansicht drehen. Dann finden Sie die EditText's und weisen ihnen einen Verweis zu.

jedoch durch setView(inflater.inflate(R.layout.gps_dialog, null)) Aufruf stattdessen den Blick auf vorbei, die Sie bereits aufgeblasen, und deren Kind EditText die Sie haben einen Verweis auf, zum Dialog, was Sie tun, eine neue Version des gps_dialog.xml aufbläst und übergibt die an den Dialog. Die Referenzen, die Sie haben, sind EditText, die nicht auf dem Bildschirm sind.

+0

Danke, das hat funktioniert und war eine sehr klare Erklärung für das Problem und was der fehlerhafte Code tat! – bobrocks95

Verwandte Themen