1

我的应用程序中有一个用于更改字体大小和样式的对话框。我希望在此对话框中所做的更改应立即反映在下面的活动中,以便为用户提供设置预览。

为此,我已经从对话框中实现了回调。但是它不起作用。任何帮助将不胜感激。

public class SettingsDialog extends DialogFragment implements OnSeekBarChangeListener {

SettingsDialogListener listener;
private int fontSize;
private String fontStyle;

SeekBar seekBar;

public void setListener(SettingsDialogListener listener) {
    this.listener = listener;
}

@Override
public Dialog onCreateDialog(Bundle savedInstanceState) {
    loadDefaultValues();
    AlertDialog.Builder builder = new AlertDialog.Builder(getActivity());
    LayoutInflater inflater = getActivity().getLayoutInflater();
    View v = inflater.inflate(R.layout.settings_dialog, null);
    seekBar = (SeekBar) v.findViewById(R.id.font_size_seek_bar);
    seekBar.setOnSeekBarChangeListener(this);
    initializeSeekBar();

    builder.setView(v);
    builder.setTitle("Font");
    builder.setPositiveButton("Ok", new DialogInterface.OnClickListener() {
        @Override
        public void onClick(DialogInterface dialog, int id) {
            listener.onFontSettingsChanged(fontSize, fontStyle);
        }
    });
    builder.setNegativeButton("Cancel", new DialogInterface.OnClickListener() {
        public void onClick(DialogInterface dialog, int id) {
            SettingsDialog.this.getDialog().cancel();
        }
    });

    return builder.create();
}

@Override
public void onProgressChanged(SeekBar arg0, int progress, boolean arg2) {
    int minFontSize = FontSettings.getMinimumFontSize();
    int maxFontSize = FontSettings.getMaximumFontSize();
    double p = (progress * (maxFontSize - minFontSize)) / 100;
    fontSize = (int) (minFontSize + p);
    listener.onFontSettingsChanged(fontSize, fontStyle);

}

@Override
public void onStartTrackingTouch(SeekBar arg0) {

}

@Override
public void onStopTrackingTouch(SeekBar arg0) {

}

public interface SettingsDialogListener {
    public void onFontSettingsChanged(int fontSize, String fontStyle);
}

private void loadDefaultValues() {
    fontSize = FontSettings.getFontSize(getActivity().getApplicationContext());
    fontStyle = FontSettings.getFontStyle(getActivity().getApplicationContext());
}

private void initializeSeekBar() {
    double percent = fontSize/FontSettings.getMaximumFontSize() * 100;
    seekBar.setProgress((int)percent);
}

在基础活动中:

@Override
public void onFontSettingsChanged(int fontSize, String fontStyle) {
    if (fragment != null)
        fragment.dosomething(fontSize,fontStyle);
}
4

0 回答 0