2016-04-27 17 views
1

に私は、スクロールビュー内でそのすべてを配置したいビューページャ、リサイクルビューなど を含むフラグメントを持って動作しませんが、それだけでスクロールすることを拒否します。私はここに何かを逃していますか 私は偽fillViewportを設定し、スクロールバーを削除しようとしました:なし、および他のもののカップルが、何も助けない...ScrollViewは、Android

<ScrollView 
     android:layout_width="match_parent" 
     android:layout_height="wrap_content" 
     android:fillViewport="true" 
     android:scrollbars="none"> 

     <RelativeLayout 
      android:layout_width="match_parent" 
      android:layout_height="wrap_content" > 

      <LinearLayout 
       android:id="@+id/headerLayout" 
       android:layout_width="wrap_content" 
       android:layout_height="wrap_content" 
       android:layout_alignParentTop="true" 
       android:orientation="horizontal" 
       android:gravity="center_vertical"> 

       <TextView 
        android:layout_width="wrap_content" 
        android:layout_height="wrap_content" 
        android:text="abc"/> 

       <ImageView 
        android:layout_width="wrap_content" 
        android:layout_height="wrap_content" 
        android:src="@drawable/image"/> 
      </LinearLayout> 

      <android.support.v7.widget.RecyclerView 
       android:layout_below="@id/headerLayout" 
       android:id="@+id/recyclerView" 
       android:scrollbars="none" 
       android:layout_width="match_parent" 
       android:layout_height="wrap_content"/> 


      <android.support.v4.view.ViewPager 
       android:layout_below="@id/recyclerView" 
       android:id="@+id/viewpager" 
       android:layout_width="match_parent" 
       android:layout_height="wrap_content"> 

       <android.support.v4.view.PagerTabStrip 
        android:id="@+id/pager_header" 
        android:layout_width="match_parent" 
        android:layout_height="wrap_content" 
        android:layout_gravity="top"/> 
      </android.support.v4.view.ViewPager> 
     </RelativeLayout> 
    </ScrollView> 
+0

がある最初のフィード画面のレイアウトである下回ります2組のスク​​ロール要素。 'ScrollView'と' RecyclerView'です。 'RecyclerView'にすべてを追加しようとすると、問題は解決されます。この投稿を試してくださいhttp://stackoverflow.com/a/25960103/842607。それはすべてが –

+0

recyclerviewが、彼らはオーバーあなたがrecyclerviewにすべてを追加何を意味 –

+0

@JimitPatelラッピングされる可能性がありますので、それは自身のスクロールのしている必要説明しますか?私は単に、すべてのことを処理する別のAdapterクラスを意味するrecyclerViewにすべてのもの(ビューページャー、既存のrecyclerviewなど)を置くことはできません。あるいは、私はあなたを正しく理解していませんでしたか? – BVtp

答えて

0

を私がコメントで答えたとおり、RecyclerViewのアダプタクラスを確認してください。私はそれが説明するには大きすぎるので、それを説明しません。スターターは、コードのリンクRecyclerview and handling different type of row inflation

に従うためにしかし、あなたは、Googleのストア

public class FeedRecyclerStickyHeaderAdapter<T> extends RecyclerStickyTypeWrapper<T> 
       implements StickyRecyclerHeadersAdapter<RecyclerView.ViewHolder> { 

      private static final String TAG = FeedRecyclerStickyHeaderAdapter.class.getSimpleName(); 

      public static final int VIEW_LOOK = 0; 
      public static final int VIEW_PRODUCT = 1; 
      public static final int VIEW_BLOG = 2; 
      public static final int VIEW_BRAND = 3; 
      public static final int VIEW_PROGRESS = 4; 
      public static final int VIEW_AD = 5; 
      public static final int VIEW_NEW_ARRIVALS = 6; 
      public static final int VIEW_FEATURED_BRANDS = 7; 

      public static final int VIEW_BIG_BANNER = 8; 
      public static final int VIEW_BRAND_FEED = 9; 

      private static final int TOTAL_VIEWS = 10; 

      private OnInteractionListener listener; 
      private OnButtonClickListener callback; 
      private Fragment fragment; 
      private Handler handler; 
      private TimerTask task; 

      private ArrayList<RecyclerView.ViewHolder> holderArrayList; 

      public FeedRecyclerStickyHeaderAdapter(Activity context, @NonNull List<T> objects, @NonNull OnInteractionListener listener) { 
       super(); 
       this.context = context; 
       this.objects = objects; 
       this.listener = listener; 
       holderArrayList = new ArrayList<>(objects.size()); 
      } 

      public FeedRecyclerStickyHeaderAdapter(Activity context, @NonNull List<T> objects, Fragment fragment, 
                @NonNull OnInteractionListener listener) { 
       super(); 
       this.context = context; 
       this.objects = objects; 
       this.fragment = fragment; 
       this.listener = listener; 
      } 

      /** 
      * Used for feeds for adding products to wishlist 
      * 
      * @param context 
      * @param objects 
      * @param fragment 
      * @param listener 
      * @param callback 
      */ 
      public FeedRecyclerStickyHeaderAdapter(Activity context, @NonNull List<T> objects, Fragment fragment, 
                @NonNull OnInteractionListener listener, @NonNull OnButtonClickListener callback) { 
       super(); 
       this.context = context; 
       this.objects = objects; 
       this.fragment = fragment; 
       this.listener = listener; 
       this.callback = callback; 
      } 

      @Override 
      public int getItemViewType(int position) { 
       if (position > -1 && position < objects.size()) { 
        if (objects.get(position) instanceof Feed) { 
         switch (((Feed) objects.get(position)).getViewType()) { 
          case Feed.LOOK_VIEW: 
           return VIEW_LOOK; 
          case Feed.BLOG_VIEW: 
           return VIEW_BLOG; 
          case Feed.PRODUCT_VIEW: 
           return VIEW_PRODUCT; 
          case Feed.PROGRESS_VIEW: 
           return VIEW_PROGRESS; 
          case Feed.FEATURED_BRANDS_VIEW: 
           return VIEW_FEATURED_BRANDS; 
          case Feed.NEW_ARRIVAL_VIEW: 
           return VIEW_NEW_ARRIVALS; 
          case Feed.AD_VIEW: 
           return VIEW_AD; 
          case Feed.BRAND_VIEW: 
           return VIEW_BRAND; 
         } 
        } else if (objects.get(position) instanceof BrandFeed) { 
         switch (((BrandFeed) objects.get(position)).getViewType()) { 
          case BrandFeed.AD_VIEW: 
           return VIEW_AD; 
          case BrandFeed.BIG_BANNER_VIEW: 
           return VIEW_BIG_BANNER; 
          case BrandFeed.BRAND_FEED_VIEW: 
           return VIEW_BRAND_FEED; 
          case BrandFeed.PROGRESS_VIEW: 
           return VIEW_PROGRESS; 
         } 
        } else if (objects.get(position) instanceof Looks) { 
         if (null != ((Looks) objects.get(position)).getLookId()) 
          return VIEW_LOOK; 
         else 
          return VIEW_PROGRESS; 
        } else if (null == objects.get(position)) 
         return VIEW_PROGRESS; 
       } 
       return super.getItemViewType(position); 
      } 

      @Override 
      public RecyclerView.ViewHolder onCreateViewHolder(ViewGroup parent, int viewType) { 
       View v; 
       switch (viewType) { 
        case VIEW_LOOK: { 
         ViewHolderLook holder = new ViewHolderLook(LayoutInflater.from(context) 
           .inflate(R.layout.listitem_look, parent, false)); 
         if (2 <= context.getResources().getInteger(R.integer.gridviewcolumn)) { 
          initializeHeaders(holder.view, holder); 
         } 
         return holder; 
        } 
        case VIEW_PRODUCT: { 
         ViewHolderProduct holder = new ViewHolderProduct(LayoutInflater.from(context) 
           .inflate(R.layout.listitem_new_product, parent, false)); 
         if (2 <= context.getResources().getInteger(R.integer.gridviewcolumn)) { 
          initializeHeaders(holder.view, holder); 
         } 
         return holder; 
        } 
        case VIEW_BLOG: { 
         ViewHolderBlog holder = new ViewHolderBlog(LayoutInflater.from(context) 
           .inflate(R.layout.blog_list_item_new, parent, false)); 
         if (2 <= context.getResources().getInteger(R.integer.gridviewcolumn)) { 
          initializeHeaders(holder.view, holder); 
         } 
         return holder; 
        } 
        case VIEW_BRAND: { 
         ViewHolderBrands holder = new ViewHolderBrands(LayoutInflater.from(context) 
           .inflate(R.layout.listitem_feed_brand, parent, false)); 
         if (2 <= context.getResources().getInteger(R.integer.gridviewcolumn)) { 
          initializeHeaders(holder.view, holder); 
         } 
         return holder; 
        } 
        case VIEW_PROGRESS: { 
         v = LayoutInflater.from(context).inflate(R.layout.dialog_progress, parent, false); 
         return new ViewHolderProgress(v); 
        } 
        case VIEW_AD: { 
         v = LayoutInflater.from(context).inflate(R.layout.listitem_offers, parent, false); 
         return new ViewHolderAd(v); 
        } 
        case VIEW_NEW_ARRIVALS: { 
         v = LayoutInflater.from(context).inflate(R.layout.listitem_new_arrivals, parent, false); 
         return new ViewHolderNewArrivals(v); 
        } 
        case VIEW_FEATURED_BRANDS: { 
         v = LayoutInflater.from(context).inflate(R.layout.listitem_featured_brands, parent, false); 
         return new ViewHolderFeaturedBrands(v); 
        } 
        case VIEW_BRAND_FEED: { 
         v = LayoutInflater.from(context).inflate(R.layout.listitem_brandfeed, parent, false); 
         return new ViewHolderBrandFeed(v); 
        } 
        case VIEW_BIG_BANNER: { 
         v = LayoutInflater.from(context).inflate(R.layout.listitem_brandfeed_big_banner, parent, false); 
         return new ViewHolderBigBanner(v); 
        } 
       } 
       return null; 
      } 

      @Override 
      public void onBindViewHolder(RecyclerView.ViewHolder holder, int position) { 
       if (BuildConfig.DEBUG) 
        Log.d(TAG, "onBindViewHolder: " + position); 
       if (null != holder) { 
        if (holder instanceof ViewHolderLook) { 
         if (2 <= context.getResources().getInteger(R.integer.gridviewcolumn)) { 
          setHeadersData((ViewHolderLook<T>) holder, position); 
         } 
         bindLookView((ViewHolderLook<T>) holder, position); 
        } else if (holder instanceof ViewHolderProduct) { 
         if (2 <= context.getResources().getInteger(R.integer.gridviewcolumn)) { 
          setHeadersData((ViewHolderProduct<T>) holder, position); 
         } 
         bindProductView((ViewHolderProduct<T>) holder, position); 
        } else if (holder instanceof ViewHolderBlog) { 
         if (2 <= context.getResources().getInteger(R.integer.gridviewcolumn)) { 
          setHeadersData((ViewHolderBlog<T>) holder, position); 
         } 
         bindBlogView((ViewHolderBlog<T>) holder, position); 
        } else if (holder instanceof ViewHolderBrands) { 
         if (2 <= context.getResources().getInteger(R.integer.gridviewcolumn)) { 
          setHeadersData((ViewHolderBrands<T>) holder, position); 
         } 
         bindBrand((ViewHolderBrands<T>) holder, position); 
        } else if (holder instanceof ViewHolderAd) 
         bindAd((ViewHolderAd<T>) holder, position); 
        else if (holder instanceof ViewHolderNewArrivals) 
         bindNewArrival((ViewHolderNewArrivals<T>) holder, position); 
        else if (holder instanceof ViewHolderFeaturedBrands) 
         bindFeaturedBrands((ViewHolderFeaturedBrands<T>) holder, position); 
        else if (holder instanceof ViewHolderProgress) { 
         if (2 == context.getResources().getInteger(R.integer.gridviewcolumn)) { 
          StaggeredGridLayoutManager.LayoutParams layoutParams = (StaggeredGridLayoutManager.LayoutParams) holder.itemView.getLayoutParams(); 
          layoutParams.setFullSpan(true); 
          holder.itemView.setLayoutParams(layoutParams); 
         } 
        } else if (holder instanceof ViewHolderBigBanner) { 
         bindBigBanner((ViewHolderBigBanner<T>) holder, position); 
        } else if (holder instanceof ViewHolderBrandFeed) { 
         bindBrandFeed((ViewHolderBrandFeed<T>) holder, position); 
        } 

        if (null == holderArrayList) 
         holderArrayList = new ArrayList<>(); 

        if (null != objects && position != -1 && position < objects.size()) { 
         if (position < holderArrayList.size() || position == 0) 
          holderArrayList.add(position, holder); 
         else 
          holderArrayList.add(holder); 
        } 
       } 
      } 

      @Override 
      public long getHeaderId(int position) { 
       if (2 <= context.getResources().getInteger(R.integer.gridviewcolumn)) 
        return -1; 

       switch (getItemViewType(position)) { 
        case VIEW_PROGRESS: 
        case VIEW_AD: 
        case VIEW_NEW_ARRIVALS: 
        case VIEW_FEATURED_BRANDS: 
        case VIEW_BIG_BANNER: 
        case VIEW_BRAND_FEED: 
         return -1; 
        default: 
         return getItem(position).hashCode(); 
       } 
      } 

      @Override 
      public long getItemId(int position) { 
       return getItem(position).hashCode(); 
      } 

      @Override 
      public RecyclerView.ViewHolder onCreateHeaderViewHolder(ViewGroup parent) { 

       StickyHeaderViewHolder<T> holder = new StickyHeaderViewHolder<T>(LayoutInflater.from(context) 
         .inflate(R.layout.listitem_header, parent, false)); 
       initializeHeaders(holder.view, holder); 
       return holder; 
      } 

      @Override 
      public void onBindHeaderViewHolder(RecyclerView.ViewHolder viewHolder, int position) { 

       if (BuildConfig.DEBUG) 
        Log.d(TAG, "onBindHeaderViewHolder: " + position); 

       if (viewHolder instanceof StickyHeaderViewHolder) { 
        setHeadersData((StickyHeaderViewHolder) viewHolder, position); 
       } 
      } 

      /** 
      * Overloading function for setting headers for tabs for sticky headers 
      * 
      * @param holder 
      * @param position 
      */ 
      private void setHeadersData(StickyHeaderViewHolder holder, int position) { 
       holder.view.setOnClickListener(new View.OnClickListener() { 
        // This click listener is not working as sticky headers are just canvas and not views 
        // as desired for click listeners. 
        @Override 
        public void onClick(View v) { 
         if (null != v.getTag()) { 
          if (v.getTag() instanceof Looks) { 
           Looks data = (Looks) v.getTag(); 
           openLook(data); 
          } else if (v.getTag() instanceof Brand) { 
           Brand data = (Brand) v.getTag(); 
           openBrand(data.getBrandId(), data.getBrandName()); 
          } else if (v.getTag() instanceof Product) { 
           Product data = (Product) v.getTag(); 
           openBrand(data.getBrandId(), data.getBrandName()); 
          } else if (v.getTag() instanceof Blog) { 
           Blog data = (Blog) v.getTag(); 

          } 

         } 
        } 
       }); 

       final T type = getItem(position); 
       if (type instanceof Feed) { 
        Feed object = (Feed) type; 
        switch (object.getViewType()) { 
         case Feed.LOOK_VIEW: { 
          Looks data = object.getLook(); 
          holder.imgHeaderDp.setImageUrl(data.getStylistImage(), MyApp.getInstance().getImageLoader()); 
          holder.lblHeaderName.setText(data.getStylistName()); 
          holder.lblHeaderTime.setText(TimeConversions.longToPrettyTimeString(data.getCreatedDate())); 

          holder.lblHeaderTime.setVisibility(View.VISIBLE); 
          holder.view.setVisibility(View.VISIBLE); 
          holder.view.setTag(data); 
          break; 
         } 
         case Feed.BLOG_VIEW: { 
          Blog data = object.getBlog(); 
     //     holder.imgHeaderDp.setImageUrl(data.getThumb(), MyApp.getInstance().getImageLoader()); 
          holder.lblHeaderName.setText(data.getAuthorName()); 
          holder.lblHeaderTime.setText(TimeConversions.longToPrettyTimeString(data.getPostedDate())); 
     // 
          holder.lblHeaderTime.setVisibility(View.VISIBLE); 
          holder.view.setVisibility(View.VISIBLE); 
          holder.view.setTag(data); 
          break; 
         } 
         case Feed.PRODUCT_VIEW: { 
          Product data = object.getProduct(); 
     //     holder.imgHeaderDp.setImageUrl(data.getProductThumbnail(), MyApp.getInstance().getImageLoader()); 
          holder.lblHeaderName.setText(data.getBrandName()); 

          holder.lblHeaderTime.setVisibility(View.GONE); 
          holder.view.setVisibility(View.VISIBLE); 
          holder.view.setTag(data); 
          break; 
         } 
         case Feed.BRAND_VIEW: { 
          Brand data = object.getBrand(); 
          holder.imgHeaderDp.setImageUrl(data.getImgLogoUrl(), MyApp.getInstance().getImageLoader()); 
          holder.lblHeaderName.setText(data.getBrandName()); 
          holder.lblHeaderTime.setVisibility(View.GONE); 
          holder.view.setVisibility(View.VISIBLE); 
          holder.view.setTag(data); 
         } 
        } 
       } else if (objects.get(position) instanceof Looks) { 
        if (null != ((Looks) objects.get(position)).getLookId()) { 
         // Looks in Looks feed 
         Looks data = ((Looks) objects.get(position)); 
         holder.imgHeaderDp.setImageUrl(data.getStylistImage(), MyApp.getInstance().getImageLoader()); 
         holder.lblHeaderName.setText(data.getStylistName()); 
         holder.lblHeaderTime.setText(TimeConversions.longToPrettyTimeString(data.getCreatedDate())); 

         holder.lblHeaderTime.setVisibility(View.VISIBLE); 
         holder.view.setVisibility(View.VISIBLE); 
         holder.view.setTag(data); 
        } 
       } 
      } 
    class ViewHolderLook<T> extends RecyclerView.ViewHolder { 

      // Header 
      RoundedNetworkImageView imgHeaderDp; 
      FontTextView lblHeaderName; 
      FontTextView lblHeaderTime; 
      View view; 

      // Body 
      FontTextView lblLookName, lblLookDesc; 
      CustomCheckbox chkFavorite; 
      ImageView btnShare; 
      SquareNetworkImageView imgLook; 

      public ViewHolderLook(View view) { 
       super(view); 

       chkFavorite = (CustomCheckbox) view.findViewById(R.id.chk_favorite); 
       btnShare = (ImageView) view.findViewById(R.id.btn_share); 
       imgLook = (SquareNetworkImageView) view.findViewById(R.id.img_look); 
       lblLookName = (FontTextView) view.findViewById(R.id.lbl_title); 
       lblLookDesc = (FontTextView) view.findViewById(R.id.lbl_desc); 

       // if it's tab then only initialize else not required 
       if (2 <= context.getResources().getInteger(R.integer.gridviewcolumn)) { 
        this.view = view.findViewById(R.id.header); 
       } 
      } 
     } 

    class ViewHolderBlog<T> extends RecyclerView.ViewHolder { 

      // Header 
      RoundedNetworkImageView imgHeaderDp; 
      FontTextView lblHeaderName; 
      FontTextView lblHeaderTime, lblReadFull; 
      View view; 
      View shareView, root; 
      LinearLayout llShare; 
      FontTextView lblBlogTitle, lblAuthor, lblRead, lblTime, lblDescription, lblLookCount; 
      FontButton btnCopyToClipboard, btnWhatsApp, btnEmail, btnFacebook, btnTwitter, btnGPlus, btnPinterest, btnInstagram; 
      SquareNetworkImageView imgBlog; 
      CustomNetworkImageView blog_image; 
      ImageView chkShare; 

      public ViewHolderBlog(View view) { 
       super(view); 

       lblBlogTitle = (FontTextView) view.findViewById(R.id.blog_title); 
       lblDescription = (FontTextView) view.findViewById(R.id.blog_description); 
       lblLookCount = (FontTextView) view.findViewById(R.id.lbl_looks_count); 
       lblAuthor = (FontTextView) view.findViewById(R.id.txt_author); 
       imgBlog = (SquareNetworkImageView) view.findViewById(R.id.iv_blogimage); 
       lblRead = (FontTextView) view.findViewById(R.id.txt_read); 
       lblTime = (FontTextView) view.findViewById(R.id.txt_timer); 
       llShare = (LinearLayout) view.findViewById(R.id.ll_share_container); 
       chkShare = (ImageView) view.findViewById(R.id.share); 
       blog_image = (CustomNetworkImageView) view.findViewById(R.id.blog_image); 
       lblReadFull = (FontTextView) view.findViewById(R.id.read_full); 
       this.root = view; 

       // if it's tab then only initialize else not required 
       if (2 <= context.getResources().getInteger(R.integer.gridviewcolumn)) { 
        this.view = view.findViewById(R.id.header); 
       } 
      } 
     } 

    class ViewHolderAd<T> extends RecyclerView.ViewHolder { 

      protected CustomViewPager viewPager; 
      protected LinearLayout llPage; 

      public ViewHolderAd(View view) { 
       super(view); 
       viewPager = (CustomViewPager) view.findViewById(R.id.view_pager); 
       llPage = (LinearLayout) view.findViewById(R.id.ll_page); 
      } 
     } 
    . 
    . 
    . 
    . 

} 

からStyFiアプリでそれを関連付けることができ、これは

<?xml version="1.0" encoding="utf-8"?> 
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android" 
    xmlns:app="http://schemas.android.com/apk/res-auto" 
    android:id="@+id/lookforu_layout" 
    android:layout_width="match_parent" 
    android:layout_height="match_parent"> 

    <com.mycompany.myapp.app.custom.widget.GifSwipeRefreshLayout 
     android:id="@+id/refresh_layout" 
     android:layout_width="match_parent" 
     android:layout_height="wrap_content"> 

     <view 
      android:id="@+id/grid_view" 
      class="android.support.v7.widget.RecyclerView" 
      android:layout_width="match_parent" 
      android:layout_height="wrap_content" 
      android:layout_marginTop="@dimen/half_padding" 
      android:gravity="center" /> 

    </com.mycompany.myapp.app.custom.widget.GifSwipeRefreshLayout> 
</RelativeLayout> 
+0

本当にこのスクロールビューを動作させる簡単な方法はありませんか? – BVtp

+0

それはその多くを意味する場合、このリンクを試してください - http://stackoverflow.com/a/32532511/842607。しかし、RecyclerViewをListViewに変更すると、私は個人的に 'RecyclerView'の内部にあるすべてのものを持っている方が好きです( –

+0

)。 – BVtp

関連する問題