Кликабельные гиперссылки в DialogFragment - PullRequest
2 голосов
/ 04 февраля 2012

Это мой статический внутренний класс для создания AlertDialog внутри моего класса MainActivity:

public static class AboutDialogFragment extends DialogFragment {

    public static AboutDialogFragment newInstance() {
        AboutDialogFragment frag = new AboutDialogFragment();
        return frag;
    }  

    @Override
    public Dialog onCreateDialog(Bundle savedInstanceState) {

        return new AlertDialog.Builder(getActivity())
                .setIcon(R.drawable.ic_dialog_about)
                .setTitle(R.string.about)
                .setMessage(R.string.about_message)
                ..........
                .create();
    }
}

И я показываю это, когда вы нажимаете пункт меню, который находится внутри MainActivity:

case R.id.about:
        DialogFragment aboutFragment = AboutDialogFragment.newInstance();
        aboutFragment.show(getSupportFragmentManager(), "about_dialog");
        // Make links clickable
        ((TextView) aboutFragment.getDialog().findViewById(android.R.id.message)).setMovementMethod(LinkMovementMethod.getInstance());
        return true;

Я пытаюсь сделать ссылки в тексте сообщения кликабельными, используя закомментированную строку.

Я нашел этот метод здесь , и он работал для меня при использовании обычного диалога (без фрагментов).
Однако я впервые пытаюсь использовать его на DialogFragment Я всегда получаю исключение NullPointerException при попытке найти представление.

Я также пытался aboutFragment.getView().findViewById(android.R.id.message), но это также возвращает ноль.

Может быть, я звоню по коду слишком рано / не в том месте?
Любые идеи будут великолепны!

РЕДАКТИРОВАТЬ: Только что попробовал ((TextView) v.getRootView().findViewById(android.R.id.message)).setMovementMethod(LinkMovementMethod.getInstance()); а также ((TextView) v.findViewById(android.R.id.message)).setMovementMethod(LinkMovementMethod.getInstance()); в onCreateView (), а также попытка в onCreateDialog () безуспешно.
Все еще получаю исключение нулевого указателя ...

Ответы [ 2 ]

10 голосов
/ 18 июня 2012

Надеюсь, вы уже поняли это, но я просто сделал то же самое и хотел где-то задокументировать.Поместите это в свой DialogFragment класс:

@Override
public void onStart() {
    super.onStart();
    ((TextView) getDialog().findViewById(android.R.id.message))
            .setMovementMethod(LinkMovementMethod.getInstance());
}
1 голос
/ 04 февраля 2012

Может быть, я вызываю код слишком рано / не в том месте?

Это моё подозрение. Есть ли какая-то причина, по которой вы не можете сделать "сделать ссылки кликабельными" внутри вашего onCreateDialog() метода?

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...