2014-11-13 7 views
5

Ich entwickle eine Android App und ich muss HTLM (auch < li> Tags) in einem textView anzeigen. Um dies zu tun habe ich diese TagHandler gefunden, aber es erhöhen, um eineAndroid TagHandler Ausnahme

java.lang.RuntimeException: Absatz Spanne bei Absatz beginnen muss Grenze

Ich habe versucht habe zu verstehen, warum, aber ich haven Ich konnte keine Lösung finden. Ich bin ziemlich neu in Android, also bitte hilf mir.

public class HtmlTagHandler implements Html.TagHandler { 
    private int mListItemCount = 0; 
    private Vector<String> mListParents = new Vector<String>(); 

    @Override 
    public void handleTag(final boolean opening, final String tag, Editable output, final XMLReader xmlReader) { 

     if (tag.equals("ul") || tag.equals("ol") || tag.equals("dd")) { 
      if (opening) { 
       mListParents.add(tag); 
      } else mListParents.remove(tag); 

      mListItemCount = 0; 
     } else if (tag.equals("li") && !opening) { 
      handleListTag(output); 
     } 



    } 



    private void handleListTag(Editable output) { 
     if (mListParents.lastElement().equals("ul")) { 
      output.append("\n"); 
      String[] split = output.toString().split("\n"); 

      int lastIndex = split.length - 1; 
      int start = output.length() - split[lastIndex].length() - 1; 
      output.setSpan(new BulletSpan(15 * mListParents.size()), start, output.length(), 0); 
     } else if (mListParents.lastElement().equals("ol")) { 
      mListItemCount++; 

      output.append("\n"); 
      String[] split = output.toString().split("\n"); 

      int lastIndex = split.length - 1; 
      int start = output.length() - split[lastIndex].length() - 1; 
      output.insert(start, mListItemCount + ". "); 
      output.setSpan(new LeadingMarginSpan.Standard(15 * mListParents.size()), start, output.length(), 0); 
     } 
    } 
} 
+0

Ich denke, Fehler ist auf output.setSpan() –

Antwort

7

den Fehler gefunden, indem einfach diese gelöst if(start<output.length()) vor

output.setSpan() 

Die korrekte und Code arbeiten, ist dies:

public class HtmlTagHandler implements Html.TagHandler { 
    private int mListItemCount = 0; 
    private Vector<String> mListParents = new Vector<String>(); 

    @Override 
    public void handleTag(final boolean opening, final String tag, Editable output, final XMLReader xmlReader) { 

     if (tag.equals("ul") || tag.equals("ol") || tag.equals("dd")) { 
      if (opening) { 
       mListParents.add(tag); 
      } else mListParents.remove(tag); 

      mListItemCount = 0; 
     } else if (tag.equals("li") && !opening) { 
      handleListTag(output); 
     } 



    } 



    private void handleListTag(Editable output) { 
     if (mListParents.lastElement().equals("ul")) { 
      output.append("\n"); 
      String[] split = output.toString().split("\n"); 

      int lastIndex = split.length - 1; 
      int start = output.length() - split[lastIndex].length() - 1; 
      if(start<output.length()) 
       output.setSpan(new BulletSpan(15 * mListParents.size()), start, output.length(), 0); 
     } else if (mListParents.lastElement().equals("ol")) { 
      mListItemCount++; 

      output.append("\n"); 
      String[] split = output.toString().split("\n"); 

      int lastIndex = split.length - 1; 
      int start = output.length() - split[lastIndex].length() - 1; 
      output.insert(start, mListItemCount + ". "); 
      if(start<output.length()) 
       output.setSpan(new LeadingMarginSpan.Standard(15 * mListParents.size()), start, output.length(), 0); 
     } 
    } 
    } 

Update:

Nach einige andere Probleme mit dem Code a Ich habe diesen Code entwickelt, der ohne Ausnahme funktioniert, ich hoffe, es wäre nützlich.

public class HtmlTagHandler implements Html.TagHandler { 
    private int mListItemCount = 0; 
    private Vector<String> mListParents = new Vector<String>(); 
    private Vector<Integer> mListCounter = new Vector<Integer>(); 


    @Override 
    public void handleTag(final boolean opening, final String tag, Editable output, final XMLReader xmlReader) { 

     if (tag.equals("ul") || tag.equals("ol")) { 
      if (opening) { 
       mListParents.add(mListParents.size(),tag); 
       mListCounter.add(mListCounter.size(), 0); 

      } else { 
       Log.d("Bohhh"," tolgo "+mListParents.get(mListParents.size()-1)); 
       mListParents.removeElementAt(mListParents.size()-1); 
       Log.d("Bohhh","lunghezza "+mListParents.size()); 
       mListCounter.removeElementAt(mListCounter.size()-1); 

      } 

     } else if (tag.equals("li") && opening) { 
      handleListTag(output); 
     } 



    } 



    private void handleListTag(Editable output) { 

     if (mListParents.lastElement().equals("ul")) { 
      if(output.length()!=0) 
      output.append("\n"); 
      for(int i=1;i<mListCounter.size();i++) 
       output.append("\t"); 
      output.append("• "); 
      } else if (mListParents.lastElement().equals("ol")) { 
      mListItemCount=   mListCounter.lastElement()+1; 
      if(output.length()!=0) 
      output.append("\n"); 
      for(int i=1;i<mListCounter.size();i++) 
       output.append("\t"); 
      output.append(mListItemCount + ". "); 
      mListCounter.removeElementAt(mListCounter.size()-1); 
      mListCounter.add(mListCounter.size(), mListItemCount); 
     } 
    } 

}