0

내 안드로이드 응용 프로그램에 대한 설정 활동을 만들고 있는데, 암호를 허용할지 여부를 결정하는 옵션 중 하나입니다. 어쨌든 그 옵션을 선택하지 않고 암호를 변경하기 전에 암호를 묻기를 원합니다. 우선권. 변경 후, 변경 후, 변경 후, Dialog 프래그먼트가 나타나서 비밀번호를 묻기를 원한다면, onPreferenceChange 메소드가 호출되어야하고, 패스워드가 정확하다면, 을 리턴함으로써 환경 설정이 변경 될 수있다.; 환경 설정

문제

내 설정 단편)을 getFragmentManager을 (인식 할 수없는 내가 getActivity.getFragmentManager 할 경우에도 그것이 preferencefragment 대화에 캐스트 할 수없는 오류를 준다이다. 대화 상자는 프로젝트의 일반적인 활동에는 작동하지만 기본 설정 조각에는 작동하지 않습니다.

은 활성
public class password_dialog extends DialogFragment { 
public interface PasswordDialogListener { 
    void onDialogPositiveClick(DialogFragment dialog, String password); 

    void onDialogNegativeClick(DialogFragment dialog); 
} 

PasswordDialogListener mListener; 


@Override 
public void onAttach(Context activity) { 
    super.onAttach(activity); 
    // Verify that the host activity implements the callback interface 
    try { 
     // Instantiate the PasswordDialogListener so we can send events to the host 
     mListener = (PasswordDialogListener) activity; 
    } catch (Exception e) { 
     Log.e("dialog",e.getMessage()); 
    } 
} 

을 주조 될 나타내는 dialogfragment이다. . .

이것은 우선 메인 코드 확장 클래스가 연장 단편 PreferenceFragmentCompat

@Override 
public void onCreatePreferences(Bundle savedInstanceState, String rootKey) { 
    addPreferencesFromResource(R.xml.preferences); 
    Preference preference = findPreference(getString(R.string.printSetting)); 

    /*****Realm*****/ 
    Realm.init(getActivity()); 
    realm = Realm.getDefaultInstance(); 

    preference.setOnPreferenceChangeListener(this); 
} 

@Override 
public boolean onPreferenceChange(Preference preference, Object newValue) { 
    DialogFragment PasswordDialogFragment = new password_dialog(); 
    PasswordDialogFragment.show(getFragmentManager(), "Password"); 

    if (passwordIsCorrect) { 
     return true; 
    } else { 
     return false; 
    } 

} 

때문에 그것이 때문에 널 포인터 예외를 제공 그 Preference.OnPreferenceChangeListener, password_dialog.PasswordDialogListener 구현 mListier은 초기화되지 않았습니다.

답변

0

getFragmentManager() 만 오류가 발생했습니다.

코드를 getFragmentManager()에서 getSupportFragmentManager()으로 변경하십시오.

희망이 도움이 될 것입니다.

0

지원을 혼합하고 있으며 수업을 지원하지 않습니다. 당신이 클래스를 가져 오는 경우 IDE은 가져 제안 같은 이름을 가진 두 개의 클래스 중 하나를

enter image description here

당신은 이미 당신은 지원 조각 관련 클래스를 사용해야합니다 (지원 라이브러리에서 클래스가) PreferenceFragmentCompat를 사용할 때 :

import android.support.v4.app.DialogFragment; 
import android.support.v4.app.FragmentManager; 
import android.support.v7.preference.Preference; 
import android.support.v7.preference.PreferenceFragmentCompat; 

public class PreferenceFragment extends PreferenceFragmentCompat implements Preference.OnPreferenceChangeListener { 

    @Override public boolean onPreferenceChange(Preference preference, Object o) { 
     FragmentManager fragmentManager = getFragmentManager(); 
     DialogFragment PasswordDialogFragment = get(); 
     PasswordDialogFragment.show(fragmentManager, "Password"); 
     return true; 
    } 
}