2013-08-18 3 views
0

У меня есть CheckBox со строкой, в которой говорится: «Я прочитал и понял условия». Теперь я хочу сделать слова «условия и положения» ссылкой, которая открывает alertdialog, где условия и условия могут быть прочитаны. Ничего особенного.Android: открыть alertdialog из части строки?

Я думаю, что-то в строке:

<string name="cont_agree">I have read and understood the <a ref="open alertdialog">terms and conditions.</a></string> 

Можно ли, и что я должен использовать, где он теперь говорит, что «открытая alertdialog»? Если это невозможно сделать, как мне это сделать?

Дополнение Чтобы открыть URL вы бы использовать этот код:

<string name="cont_agree"><a ref="http://www.stackoverflow.com">Stackoverflow</a></string> 

Но как открыть alertdialog, или сказать, другой экран, из строки? Я видел приложения, которые делают это так, возможно, конечно, но как?

EDIT: Это код, я использую для SpannableStringBuilder:

SpannableStringBuilder text = new SpannableStringBuilder(); 
text.append(getString(R.string.before)); 
//Now create a ClickableSpan 
ClickableSpan clickableSpan = new ClickableSpan() { 
      @Override 
      public void onClick(View view) {     

       d.show(); //Here dialog will be displayed 
      } 
     }; 
//Now append the TOS string 
text.append(getString(R.string.popup)); 
//Declare that the "TOS" string is a clickableSpan 
text.setSpan(clickableSpan, getString(R.string.before).length(),getString(R.string.before).length()+getString(R.string.popup).length(), 0); //Check on API setSpan method 
((CheckBox)findViewById(yourview)).setMovementMethod(LinkMovementMethod.getInstance()); 
((CheckBox)findViewById(yourview)).setText(text, BufferType.SPANNABLE); 

я все еще получаю некоторые маркеры на первой линии "text.append". Множественные маркеры на этой линии:

  • Возврат типа для метода отсутствующего
  • Синтаксис ошибку на маркер «)», {ожидается, после того, как этот маркер
  • R.string.before не может быть разрешен к типу
  • Синтаксическая ошибка на маркер «)», недействительным VariableDeclaratorId
  • Синтаксическая ошибка на маркер «добавить», идентификатор ожидаемого после этого маркера
+2

Проверить эту ссылку [SO] (HTTP: // StackOverflow .com/questions/12069811/android-hyperlinks-on-textview-in-custom-alertdialog-not-clickable) –

+0

Да, я видел это, но он пытается открыть ссылки FROM alertdialog, если я не ошибаюсь. Я хочу открыть alertdialog из обычной строки, используемой в флажке. Поэтому я не нашел ответа. – andysando

+0

Мне очень нужна помощь в этом. Кто-нибудь понял? – andysando

ответ

1

Первой установки диалогового

Dialog d = new Dialog(context); 
d.setTitle... etcetc 

В вашем values.xml создать 2 строки

<string name="before">I have read and understood the</string> 
<string name="popup">TOS</string</string> 

Теперь вы можете использовать SpannableStringBuilder

SpannableStringBuilder text = new SpannableStringBuilder(); 
text.append(getString(R.string.before)); 
//Now create a ClickableSpan 
ClickableSpan clickableSpan = new ClickableSpan() { 
      @Override 
      public void onClick(View view) {     

       d.show(); //Here dialog will be displayed 
      } 
     }; 
//Now append the TOS string 
text.append(getString(R.string.popup)); 
//Declare that the "TOS" string is a clickableSpan 
text.setSpan(clickableSpan, getString(R.string.before).length(), getString(R.string.before).length()+getString(R.string.popup).length(), 0); //Check on API setSpan method 
((CheckBox)findViewById(yourview)).setMovementMethod(LinkMovementMethod.getInstance()); 
((CheckBox)findViewById(yourview)).setText(text, BufferType.SPANNABLE); //AAAAND WE'RE DONE! 
+0

Большое спасибо, я сейчас пытаюсь это сделать. Но я не могу заставить text.append-линию работать. Я получаю несколько маркеров в этой строке, но append является первым. «Синтаксическая ошибка на токене« append », идентификатор, ожидаемый после этого токена« Что это значит? – andysando

+0

Не могли бы вы разместить свой код? –

+0

Извините, у меня был код ошибки. это был R.String с капиталом S, но S должен быть в нижнем регистре, поэтому R.string.before и R.string.popup –

Смежные вопросы