2016-08-08 20 views
3

Ich habe 3 Art itemview in meinem recyclerview und das letzte ist enthält voll von webview. Wenn ich auf die Webansicht klicke, die eine Reihe von Recycler-Ansichten darstellt, scrollt die Recycleransicht nach oben. Wie kann ich dieses Problem beheben?Webview in Recyclerview funktioniert nicht richtig

Das ist mein Plan, der Webansicht

<?xml version="1.0" encoding="utf-8"?> 
<WebView xmlns:android="http://schemas.android.com/apk/res/android" 
android:orientation="vertical" android:layout_width="match_parent" 
android:layout_height="wrap_content" 
android:id="@+id/webView"> 
</WebView> 

Adapter containts:

public class HomePageAdapter extends  RecyclerView.Adapter<RecyclerView.ViewHolder> { 

    private String htmlContent; 
    private ArrayList<Slider> homePageSliders; 
    private ArrayList<HomePageItem> homePageItems; 

    private final int VIEW_SLIDER = 0; 
    private final int VIEW_HOMEPAGEITEM = 1; 
    private final int VIEW_HOMEPAGEHTML = 2; 


    private OnItemClickCallBack<HomePageItem> callBack; 

    public HomePageAdapter(ArrayList<Slider> homePageSliders, ArrayList<HomePageItem> homePageItems, String htmlContent, OnItemClickCallBack<HomePageItem> callBack) 
    { 
     this.homePageSliders = homePageSliders; 
     this.homePageItems = homePageItems; 
     this.htmlContent  = htmlContent; 
     this.callBack  = callBack; 

    } 

    @Override 
    public RecyclerView.ViewHolder onCreateViewHolder(ViewGroup parent, int viewType) { 

     if(viewType == VIEW_SLIDER) { 
      return new HomePageSliderHolder(LayoutInflater.from(parent.getContext()).inflate(R.layout.row_homepage_slider, parent, false)); 
     } 
     else if(viewType == VIEW_HOMEPAGEITEM) 
     { 
      return new HomePageItemHolder(LayoutInflater.from(parent.getContext()).inflate(R.layout.row_homepage_item, parent, false)); 

     } 
     else 
     { 
      return new HomePageHtmlContentHolder(LayoutInflater.from(parent.getContext()).inflate(R.layout.row_homepage_html, parent, false)); 
     } 
    } 

    @Override 
    public void onBindViewHolder(RecyclerView.ViewHolder holder, int position) { 

     if(holder instanceof HomePageSliderHolder) 
     { 
      HomePageSliderHolder viewHolder = (HomePageSliderHolder) holder; 
      viewHolder.setViewPagerAdapter(this.homePageSliders); 
     } 
     else if(holder instanceof HomePageItemHolder) 
     { 
      HomePageItemHolder viewHolder = (HomePageItemHolder) holder; 

      int newPosition = position -1; 
      final HomePageItem homePageItem = this.homePageItems.get(newPosition); 

      viewHolder.setImagePath(homePageItem); 
      viewHolder.itemView.setOnClickListener(new View.OnClickListener() { 
       @Override 
       public void onClick(View v) { 
        callBack.onItemClick(homePageItem); 
       } 
      }); 
     } 
     else 
     { 
      HomePageHtmlContentHolder viewHolder = (HomePageHtmlContentHolder) holder; 
      viewHolder.setHtml(htmlContent); 
      viewHolder.setWebViewClickListener(); 
     } 
    } 

    @Override 
    public int getItemCount() { 
     return 1 + 1 + homePageItems.size(); 
    } 

    @Override 
    public int getItemViewType(int position) { 

     if(position == 0) 
     { 
      return VIEW_SLIDER; 
     } 
     else if(position < homePageItems.size()) 
     { 
      return VIEW_HOMEPAGEITEM; 
     } 
     else 
     { 
      return VIEW_HOMEPAGEHTML; 
     } 

    } 
} 

Webview Klick Zuhörer: i

public void setWebViewClickListener() 
    { 
     this.webView.setWebViewClient(new WebViewClient(){ 

      @Override 
      public boolean shouldOverrideUrlLoading(WebView view, String url) { 
       Crashlytics.log(Log.ASSERT, "url : ", url); 
       return true; 
      } 
     }); 
    } 

Antwort

0

Wenn ich die HTML-Antwort untersuchen dann erkannt, dass es Kein Host in der Weiterleitungs-URL (zum Beispiel google: //). Dann habe ich es durch den Host ersetzt und es funktioniert wie ein Zauber.

Verwandte Themen