Начать действие для результата внутри класса, расширенного из диалогового окна

У меня есть класс dialogpreference с пользовательским представлением внутри него. этот диалог используется для отображения пользовательских звуков уведомлений с несколькими параметрами. у этого также есть возможность выбрать пользовательский звук уведомления телефона по умолчанию. чтобы сохранить это значение, я должен вызвать метод намерения

 Intent intent = new Intent(RingtoneManager.ACTION_RINGTONE_PICKER);
            intent.putExtra(RingtoneManager.EXTRA_RINGTONE_TITLE, "Select ringtone for notifications:");
            intent.putExtra(RingtoneManager.EXTRA_RINGTONE_SHOW_SILENT, false);
            intent.putExtra(RingtoneManager.EXTRA_RINGTONE_SHOW_DEFAULT, true);
            intent.putExtra(RingtoneManager.EXTRA_RINGTONE_TYPE,RingtoneManager.TYPE_NOTIFICATION);
            intent.putExtra(RingtoneManager.EXTRA_RINGTONE_EXISTING_URI, (Uri) null);
startActivityForResult( intent, mRequestCode);

но чтобы получить результат внутри onActivityResult для результата я должен позвонить startActivityForResult, Но onstartActivity не поддерживается в dialogPreference. Есть ли другой способ реализации startActivityForResult,

public class RingtonePref extends DialogPreference implements PreferenceManager.OnActivityResultListener  {
private View view;
RecyclerView rvRingtone;
RingtonePrefAdapter adapter;
Context context;
int pos;
String chosenRingtone;
int mRequestCode =5;


public RingtonePref(Context context, AttributeSet attrs) {
    super(context, attrs);
    this.context=context;
}

@Override
protected View onCreateDialogView() {
    view= View.inflate(getContext(), R.layout.layout_ringtone_pref,null);

    rvRingtone= (RecyclerView)view.findViewById(R.id.rv_ringtone);
    RecyclerView.LayoutManager mLayoutManager = new LinearLayoutManager(context);
    adapter= new RingtonePrefAdapter();
    rvRingtone.setLayoutManager(mLayoutManager);
    rvRingtone.setAdapter(adapter);
    adapter.setData(generateDataList());
    RXEventBusUtils.getInstance().getSubject().subscribeOn(AndroidSchedulers.mainThread())
            .subscribe(this::onReceiveEvent);
    return view;

}

private List<RingtoneList> generateDataList() {
    ArrayList<RingtoneList> ringList= new ArrayList<>();
    ringList.add(new RingtoneList("Classic", true));
    ringList.add(new RingtoneList("Short",false));
    ringList.add(new RingtoneList("Sound style",false));
    ringList.add(new RingtoneList("Customize",false));
    return ringList;
}
private void onReceiveEvent(Object event){
    if (event instanceof RingToneSelectionEvent){
        pos= ((RingToneSelectionEvent) event).getPosition();
        adapter.clearSelection();
        adapter.setSelection(((RingToneSelectionEvent) event).getPosition());
    }
}

@Override
protected void onBindDialogView(View v) {
    super.onBindDialogView(v);
}

@Override
protected void onDialogClosed(boolean positiveResult) {
    super.onDialogClosed(positiveResult);
    String interval = null;

    if (positiveResult) {
        interval= String.valueOf(pos);
        if (callChangeListener(interval)) {
            persistString(interval);
        }
    }
}

@Override
protected Object onGetDefaultValue(TypedArray a, int index) {
    return(a.getString(index));
}


@Override
public boolean onActivityResult(int requestCode, int resultCode, Intent data) {
    if (resultCode == Activity.RESULT_OK && requestCode == mRequestCode)
    {
        Uri uri = data.getParcelableExtra(RingtoneManager.EXTRA_RINGTONE_PICKED_URI);

        if (uri != null)
        {
            this.chosenRingtone = uri.toString();
            Toast.makeText(context, "uri "+ chosenRingtone, Toast.LENGTH_SHORT).show();

        }
        else
        {

            this.chosenRingtone = null;
        }
    }
    return true;
}

}

0 ответов

Другие вопросы по тегам