0

DialogFragment에서 값을 가져오고 싶습니다 : EditText에 값을 입력하고 그것에 관한 Fragment의 TextView를 변경하십시오.안드로이드 DialogFragment가 getActivity()에서 ClasscastExeption을 던졌습니다.

내 조각

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

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

대화

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

나는 많은 예를 찾아했지만 확인할 수 없습니다

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) 

로그. 당신이 원인과 해결책을 안다면 저를 도우십시오.

답변

0

다른 조각 안에 DialogFragment를 열기 할 때

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

당신은에 의해 부모 조각을 얻을 수 있도록 코드를 같이 할 필요가

getParentFragment() :

@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

당신을 감사합니다 너무 많은 선생님 !! :) – user3552715

2

MyPageActivity (implements MyPageNicknameDialog.onNicknameListener)은 활동이 아닙니다. getActivity은 Fragment를 호스팅하는 Activity를 반환합니다. 해당 인터페이스를 구현하지 않으면 ClassCastException이 던졌습니다.

0

클래스 "MyPageActivity"은 활동이 아니라 단편으로 정의됩니다. getActivity() 메서드를 사용할 때 인터페이스를 구현하지 않는 조각 "MyPageActivity"을 호스팅하는 활동을 얻게됩니다. 액티비티를 확장하려면 "MyPageActivity"을 호스팅하는 액티비티에 인터페이스를 구현하거나 액티비티를 확장하려면 "MyPageActivity"을 변경해야합니다.