2017-02-21 3 views
0

Ich benutze benutzerdefinierte Adapter, um Kontakte in Listview anzuzeigen, und ich erstelle onClick Funktion, die benutzerdefinierte Dialogfeld öffnen, wenn ein Element klicken. Danach möchte ich die Kontaktnummer aus dem Dialogfeld bekommen, aber wenn ich versuche, ein Popup-Fenster zu erhalten.Holen Sie sich Wert von benutzerdefinierten Dialog in Android

IllegalStateException: Could not execute method for android:onClick 

benutzerdefinierten Dialog von Custom Adapter

// Other code 
// This code is working fine problem is in activity class 
public void onClick(View v) { 
       Toast.makeText(context, "Item click", Toast.LENGTH_SHORT).show(); 
       String phoneNumber = phone.getText().toString(); 
       String userName = name.getText().toString(); 
       final Dialog dialog = new Dialog(context); 
       dialog.setContentView(R.layout.custom_dialog); 
       dialog.setTitle(userName); 
       EditText etxtContactNumber = (EditText) dialog.findViewById(R.id.etxtContactNumber); 
       etxtContactNumber.setText(phoneNumber); 
       dialog.show(); 
      } 
// reset of the code 

Dialogfeld-

<EditText 
    android:layout_width="match_parent" 
    android:layout_height="wrap_content" 
    android:inputType="textPersonName" 
    android:text="Name" 
    android:ems="10" 
    android:id="@+id/etxtContactNumber" /> 

<Button 
    android:text="Send SMS" 
    android:layout_width="match_parent" 
    android:layout_height="wrap_content" 
    android:id="@+id/btnSendMessage" 
    android:onClick="sendMessage" /> 

<Button 
    android:text="Phone Call" 
    android:layout_width="match_parent" 
    android:layout_height="wrap_content" 
    android:id="@+id/btnPhoneCall" 
    android:onClick="phoneCall" /> 

Hauptaktivität

protected void sendMessage(View view){ 
    Toast.makeText(this, "Send Message", Toast.LENGTH_SHORT).show(); 
    EditText etxtContactNumber = (EditText) view.findViewById(R.id.etxtContactNumber); 
    String phoneNumber = etxtContactNumber.getText().toString(); 
    String uri= "smsto:"+phoneNumber; 
    Intent intent = new Intent(Intent.ACTION_SENDTO, Uri.parse(uri)); 
    startActivity(intent); 
} 

Ich kenne den Grund des Fehlers etxtContactNumber ist nicht in dieser Ansicht. Dies ist auch nicht in der Haupttätigkeitsansicht, wo es ist, wie ich es bekommen kann.
Individuelle Adapter und MainActivity beide sind zwei verschiedene Dateien

+0

verwenden 'Pub lic void sendMessage' –

+0

'public' funktioniert nicht –

Antwort

0

Wenn Sie dialog in customAdapter zu erstellen und den Wert in MainActivity erhalten möchten nur Dialog als public static erstellen und initialisieren es in Auftragnehmer

Individuelle Adapter

public static Dialog dialog; 
    customAdapter(Context ctx){ 
     dialog = new Dialog(ctx); 
    } 

Hauptaktivität

dialog.findViewById(R.id.etxtContactNumber); 
0

Sie uns bitte die unten Linie um die benutzerdefinierte Ansicht infalte von

View v = LayoutInflater.from(parent.getContext()).inflate(R.layout.row_filter, parent, false); 

und nach dann

EditText etxtContactNumber = (EditText)v.findViewById(R.id.etxtContactNumber); 
0

Sie brauchen nicht zu extContactNumber Text von Ihrem benutzerdefinierten Adapter.

Sie müssen eine customDialog.java-Klasse erstellen und unter onCreate() den folgenden Code ausführen.

setContentView(R.layout.custom_dialog); 
setTitle(userName); 
EditText etxtContactNumber =(EditText)findViewById(R.id.etxtContactNumber); 
etxtContactNumber.setText(phoneNumber); 

Sie müssen den folgenden Code bei onClick von benutzerdefinierten Adapter tun.

final Dialog dialog = new Dialog(context); 
dialog.show(); 

Ich hoffe, dies wird Ihr Problem beheben.

Verwandte Themen