0

Je veux obtenir la valeur dans DialogFragment: entrez une valeur dans un EditText et modifiez le TextView en Fragment le concernant.Android DialogFragment lève ClasscastException de getActivity()

Mon Fragment

public class MyPageActivity extends Fragment implements MyPageNicknameDialog.onNicknameListener{ 
... 

@Override 
public void setNicknameListener(String arg){ 
    mypage_nickname_text.setText(arg); 
} 
} 

Dialog

public class MyPageNicknameDialog extends DialogFragment{ 

... 

public interface onNicknameListener{ 
    void setNicknameListener(String arg); 
} 

@Override 
public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState){ 

    dialogView = inflater.inflate(R.layout.dialog_nickname_mypage, container, false); 

    getDialog().getWindow().requestFeature(Window.FEATURE_NO_TITLE); 
    getDialog().getWindow().setFlags(WindowManager.LayoutParams.FLAG_FULLSCREEN, WindowManager.LayoutParams.FLAG_FULLSCREEN); 

    nickname_dialog_edittext = (EditText)dialogView.findViewById(R.id.nickname_dialog_edittext); 
    nickname_dialog_edittext.requestFocus(); 
    nickname_dialog_edittext.setOnEditorActionListener(new OnEditorActionListener() { 

     @Override 
     public boolean onEditorAction(TextView v, int actionId, KeyEvent event) { 

      // Here thorws ClasscastExeption 
      onNicknameListener activity = (onNicknameListener) getActivity(); 
      activity.setNicknameListener(nickname_dialog_edittext.getText().toString()); 
      getDialog().dismiss(); 

      return false; 
     } 
    }); 

    //init(); 

    return dialogView; 
} 
} 

Le journal

05-21 22:48:42.725: E/AndroidRuntime(17131): java.lang.ClassCastException: com.hhh.kiznic.MainFragmentActivity cannot be cast to com.hhh.kiznic.MyPageNicknameDialog$onNicknameListener 
05-21 22:48:42.725: E/AndroidRuntime(17131): at com.hhh.kiznic.MyPageNicknameDialog$1.onEditorAction(MyPageNicknameDialog.java:54) 
05-21 22:48:42.725: E/AndroidRuntime(17131): at android.widget.TextView.onEditorAction(TextView.java:4973) 
05-21 22:48:42.725: E/AndroidRuntime(17131): at com.android.internal.widget.EditableInputConnection.performEditorAction(EditableInputConnection.java:138) 
05-21 22:48:42.725: E/AndroidRuntime(17131): at com.android.internal.view.IInputConnectionWrapper.executeMessage(IInputConnectionWrapper.java:297) 
05-21 22:48:42.725: E/AndroidRuntime(17131): at com.android.internal.view.IInputConnectionWrapper$MyHandler.handleMessage(IInputConnectionWrapper.java:77) 
05-21 22:48:42.725: E/AndroidRuntime(17131): at android.os.Handler.dispatchMessage(Handler.java:99) 
05-21 22:48:42.725: E/AndroidRuntime(17131): at android.os.Looper.loop(Looper.java:137) 
05-21 22:48:42.725: E/AndroidRuntime(17131): at android.app.ActivityThread.main(ActivityThread.java:5493) 
05-21 22:48:42.725: E/AndroidRuntime(17131): at java.lang.reflect.Method.invokeNative(Native Method) 
05-21 22:48:42.725: E/AndroidRuntime(17131): at java.lang.reflect.Method.invoke(Method.java:525) 
05-21 22:48:42.725: E/AndroidRuntime(17131): at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:1209) 
05-21 22:48:42.725: E/AndroidRuntime(17131): at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:1025) 
05-21 22:48:42.725: E/AndroidRuntime(17131): at dalvik.system.NativeStart.main(Native Method) 

J'étais trouver de nombreux exemples, mais ne pouvaient être résolus. Si vous connaissez la cause et la solution s'il vous plaît aidez-moi.

Répondre

0

Lorsque vous ouvrez un DialogFragment dans un autre fragment

dialog.show(getChildFragmentManager(), "dialog"); 

vous pouvez obtenir le fragment parent par getParentFragment()

Ainsi, votre code doit ressembler à ceci:

@Override 
    public boolean onEditorAction(TextView v, int actionId, KeyEvent event) { 

     // Here thorws ClasscastExeption 
     onNicknameListener parentFrag = (onNicknameListener) getParentFragment(); 
     parentFrag.setNicknameListener(nickname_dialog_edittext.getText().toString()); 
     getDialog().dismiss(); 

     return false; 
    } 
+0

merci tellement monsieur !! :) – user3552715

2

MyPageActivity, qui implements MyPageNicknameDialog.onNicknameListener, est un fragment n'est pas une activité. getActivity renvoie l'activité qui héberge le fragment. Si elle n'implémente pas cette interface, le ClassCastException est lancé

0

Votre classe "MyPageActivity" n'est pas définie comme une activité mais comme un fragment. Lorsque vous utilisez la méthode getActivity(), vous obtenez l'activité qui héberge le fragment "MyPageActivity" qui n'implémente pas l'interface. Vous devez implémenter l'interface dans l'activité qui héberge le "MyPageActivity" ou modifier "MyPageActivity" pour étendre une activité.

Questions connexes