2017-07-26 6 views
-1

FragmentPagerAdapterで表示されるテキストがあります。 このテキストには、クリック可能なリンクが含まれています。 ViewでOnTouchEventを使用するソリューションがありますが、座標を取得するにはどうすればよいですか? また、PagerAdapterの方が良いソリューションがありますか?コードは次のとおりです:PagerAdapterのクリック可能なリンク

private void setupPager() { 
    if (pagerAdapter == null) { 
     pagerAdapter = new TextFragmentPagerAdapter(getSupportFragmentManager()); 
    } 
    pager.setAdapter(pagerAdapter); 
    findViewById(R.id.progressBar1).setVisibility(View.GONE); 
    pager.setCurrentItem(current_page); 
    pager.setVisibility(View.VISIBLE); 
} 

private class TextFragmentPagerAdapter extends FragmentStatePagerAdapter { 

    public TextFragmentPagerAdapter(FragmentManager fragmentManager) { 
     super(fragmentManager); 
    } 

    @Override 
    public Fragment getItem(int position) { 
     spannable_page = null; 
     Fragment fragment = new Fragment(); 
     new PageForm(position, line_array, spannable_main).start(); 
     while (true) { 
      if (spannable_page != null) { 
       fragment = PageFragment.newInstance(spannable_page.get()); 
       break; 
      } 
     } 
     return fragment; 
    } 

    @Override 
    public int getCount() { 
     return total_pages; 
    } 
} 

インナークラスPageFormはこのように各ページを作成します:

EDITは

ので
... 
    Object[] spans_test = spannable.getSpans(start_range, end_range - 1, Object.class); 
      CharSequence sequence_test = spannable.subSequence(start_range, end_range); 
      SpannableStringBuilder builder_test = new SpannableStringBuilder(); 
      builder_test.insert(0, sequence_test); 
      int sp_start, sp_end, flags, sp_s_fin, sp_e_fin; 

      for (int i = 0; i < spans_test.length; i++) { 
       sp_start = spannable.getSpanStart(spans_test[i]); 
       sp_end = spannable.getSpanEnd(spans_test[i]); 
       flags = spannable.getSpanFlags(spans_test[i]); 
       sp_s_fin = sp_start - start_range; 
       sp_e_fin = sp_end - start_range; 
       if (sp_s_fin < 0) sp_s_fin = 0; 
       if (sp_e_fin > builder_test.length() - 1) sp_e_fin = builder_test.length() - 1; 
       builder_test.setSpan(spans_test[i], sp_s_fin, sp_e_fin, flags); 
      } 

      synchronized (this) { 
       spannable_page = new WeakReference<Spannable>(builder_test); 
      } 

、何とか私は、各ページ内のリンクを追跡する必要があります。

+0

コードを最初に表示する=) – DEADMC

+0

いくつかのコードを追加しました。ありがとうございます。 – Bord81

答えて

0

私は解決策を見つけました。それは私が思ったよりも簡単でした。 PagerAdapterでリンクをクリック可能にするキーは、リスナーをページのFragmentクラスに配置することです。

public class PageFragment extends Fragment { 
... 
public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) { 
... 


URLSpan[] links = spannable.getSpans(0, spannable.length(), URLSpan.class); 
     for (URLSpan span : links) { 
      textLinks(spannable, span); 
     } 
     textView.setText(spannable); 
      textView.setMovementMethod(LinkMovementMethod.getInstance()); 
     return view; 
    } 


private void textLinks(Spannable text, final URLSpan span) { 
     int start = text.getSpanStart(span); 
     int end = text.getSpanEnd(span); 
     int flags = text.getSpanFlags(span); 
     ClickableSpan clickable = new ClickableSpan() { 
      @Override 
      public void onClick(View view) { 
       System.out.println("LINK CHECK: " + span.getURL()); 
      } 
     }; 
     text.setSpan(clickable, start, end, flags); 
     text.removeSpan(span); 
    } 
関連する問題