2014-11-13 14 views
5

Bir Android Uygulaması geliştiriyorum ve HTLM (ayrıca < li> etiketleri) bir textView içine görüntülemem gerekiyor. Nedenini anlamak için uğraş ettikAndroid TagHandler exception

paragrafta sınır başlamalıdır PARAGRAF açıklığı, ama ben cenneti: Bu TagHandler buldum ama bir

java.lang.RuntimeException yükseltmek Bunu yapmak için bir çözüm bulamadı. Android için oldukça yeniyim, lütfen bana yardım edin. hata Bulunan

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

Bence error on output.setSpan() –

cevap

7

, basitçe ekleyerek çözmüş bu if(start<output.length())

output.setSpan() 

önce doğru ve çalışan kod şudur: ettikten sonra

:

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); 
     } 
    } 
    } 

Güncelleme kod ile başka bir sorun bove İstisnasız çalışan bu kodu geliştirdim, umarım yararlı olur.

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); 
     } 
    } 

} 
İlgili konular