I've a "text view" with 6 lines. I want to show the number of each line with a Toast when I click on each of them. When I use "Spans" it just shows the last line number. How can write a loop for Spans to return all lines number. Any other suggestions? Thanks for your help.
My Code:
public class Activity1 : AppCompatActivity
{
TextView textView;
int count = 6; //Number of lines
int next;
string txt;
protected override void OnCreate(Bundle savedInstanceState)
{
base.OnCreate(savedInstanceState);
SetContentView(Resource.Layout.activity_main);
textView = FindViewById<TextView>(Resource.Id.textView1);
txt = Resources.GetString(Resource.String.test);
SpannableString ss = new SpannableString(txt);
var clickableSpan = new MyClickableSpan();
clickableSpan.Click += v => Toast.MakeText(this, "line : 1", ToastLength.Short).Show();
ss.SetSpan(clickableSpan, 0, a, SpanTypes.ExclusiveExclusive);
textView.TextFormatted = ss;
textView.MovementMethod = new LinkMovementMethod();
//For all lines
//var clickableSpan1 = new MyClickableSpan();
//var clickableSpan2 = new MyClickableSpan();
//var clickableSpan3 = new MyClickableSpan();
//var clickableSpan4 = new MyClickableSpan();
//var clickableSpan5 = new MyClickableSpan();
...
}
private class MyClickableSpan : ClickableSpan
{
public Action<View> Click;
public override void OnClick(View widget)
{
if (Click != null)
Click(widget);
}
public override void UpdateDrawState(TextPaint textPaint)
{
textPaint.UnderlineText = false;
}
}
}
My Code for loop: From this answer
for (int i = 0; i < ss.Length(); i = next)
{
// find the next span transition
next = ss.NextSpanTransition(i, ss.Length(), Class.FromType(typeof(CharacterStyle)));
// get all spans in this range
int numOfSpans = 0;
//CharacterStyle[] spans = ss.GetSpans(i, next, Class.FromType(typeof(CharacterStyle))); //return null!!!
for (int j = 0; j < count; j++)
{
numOfSpans++;
}
var clickableSpan = new MyClickableSpan();
clickableSpan.Click += v => Toast.MakeText(this, "line : " + numOfSpans, ToastLength.Short).Show(); //return last number of lines : 6
ss.SetSpan(clickableSpan, i, next, SpanTypes.ExclusiveExclusive);
textView.TextFormatted = ss;
textView.MovementMethod = new LinkMovementMethod();
}