2016-05-29 5 views
1

Мне нужно создать экран типа приложения электронной торговли с несколькими видами просмотра и просмотра ресайклеров.View Pager inside Recycler view, не отображающий данные в android

Я реализовал его, но мой плейер с 1 из 2 виден в режиме ресайклера, и как только я вращаю устройство, мой первый пейджер открывается также.

Моя активность:

public class MainActivity extends AppCompatActivity { 

private List<ProductEntity> productEntities = new ArrayList<>(); 
private RecyclerView productlist; 
private HomeAdapter homeAdapter; 
private RecyclerView.LayoutManager mLayoutManager; 
@Override 
protected void onCreate(Bundle savedInstanceState) { 
    super.onCreate(savedInstanceState); 
    setContentView(R.layout.activity_main); 
    Toolbar toolbar = (Toolbar) findViewById(R.id.toolbar); 
    setSupportActionBar(toolbar); 
    productlist = (RecyclerView)findViewById(R.id.mainlist); 
    //productlist.setHasFixedSize(true); 
    mLayoutManager = new LinearLayoutManager(this); 
    productlist.setLayoutManager(mLayoutManager); 
    homeAdapter = new HomeAdapter(this,getSupportFragmentManager(),productEntities); 
    productlist.setAdapter(homeAdapter); 
    new ParserJsonTask().execute(); 
} 

public String loadJSONFromAsset() { 
    StringBuffer sb = new StringBuffer(); 
    BufferedReader br = null; 
    try { 
     br = new BufferedReader(new InputStreamReader(getAssets().open(
       "f_two.json"))); 
     String temp; 
     while ((temp = br.readLine()) != null) 
      sb.append(temp); 
    } catch (IOException e) { 
     e.printStackTrace(); 
    } finally { 
     try { 
      br.close(); // stop reading 
     } catch (IOException e) { 
      e.printStackTrace(); 
     } 
    } 
    return sb.toString(); 
} 

private class ParserJsonTask extends AsyncTask<Void, Integer, List<ProductEntity>> { 
    @Override 
    protected List<ProductEntity> doInBackground(Void... params) { 

     try{ 
      return JsonParser.getInstance().parseJson(loadJSONFromAsset()); 

     }catch(Exception e){ 
      Log.d("Exception", e.toString()); 
     } 
     return null; 
    } 

    @Override 
    protected void onPostExecute(List<ProductEntity> result) { 
     Log.e("Length",""+result.size()); 
     if(result != null) { 
      productEntities = result; 
      homeAdapter.setProduct(productEntities); 
     } 
    } 
} 

мой взгляд пейджера Фрагмент:

public class ImageFragment extends Fragment { 
/** 
* The fragment argument representing the section number for this 
* fragment. 
*/ 
private static final String ARG_IMAGE_URL = "image_url"; 
private Context context; 
private String image_url; 
public ImageFragment() { 
} 

@Override 
public void onAttach(Context context) { 
    super.onAttach(context); 
    this.context = context; 
} 

/** 
* Returns a new instance of this fragment for the given section 
* number. 
*/ 
public static ImageFragment newInstance(String image) { 
    ImageFragment fragment = new ImageFragment(); 
    Bundle args = new Bundle(); 
    args.putString(ARG_IMAGE_URL, image); 
    fragment.setArguments(args); 
    return fragment; 
} 

@Override 
public void onCreate(Bundle savedInstanceState) { 
    super.onCreate(savedInstanceState); 
    if (getArguments() != null) { 
     image_url = getArguments().getString(ARG_IMAGE_URL); 
    } 
} 

@Override 
public View onCreateView(LayoutInflater inflater, ViewGroup container, 
         Bundle savedInstanceState) { 
    View rootView = inflater.inflate(R.layout.fragment_image, container, false); 
    ImageView image = (ImageView) rootView.findViewById(R.id.image); 
    Log.e("Pager Item Image",""+image_url); 
    if(!TextUtils.isEmpty(image_url)) 
    Picasso.with(context).load(image_url).into(image); 
    return rootView; 
} 
} 

Мой Главный адаптер для просмотра ресайклера:

public class HomeAdapter extends RecyclerView.Adapter<RecyclerView.ViewHolder> { 
private List<ProductEntity> productEntities; 
private Context context; 
private FragmentManager fragmentManager; 
private OnItemClickListener mItemClickListener; 
private static final int TYPE_FIRST = 0; 
private static final int TYPE_SECOND = 1; 
private static final int TYPE_THIRD = 2; 
private static final String TEMPLATE_FIRST ="product-template-1"; 
private static final String TEMPLATE_SECOND ="product-template-2"; 
private static final String TEMPLATE_THIRD ="product-template-3"; 
public HomeAdapter(Context context , FragmentManager fragmentManager ,List<ProductEntity> productEntities) { 
    this.productEntities = productEntities; 
    this.context = context; 
    this.fragmentManager = fragmentManager; 
} 

@Override 
public int getItemCount() { 
    Log.e("Item count",""+productEntities.size()); 
    return productEntities.size(); 
} 

@Override 
public void onBindViewHolder(RecyclerView.ViewHolder holder, int position) { 
    if(holder instanceof ImageViewHolder) { 
     ImageViewHolder imageViewHolder = (ImageViewHolder) holder; 
     ProductEntity productEntity = productEntities.get(position); 
     Log.e("Template Item Image",""+productEntity.getItemEntities().get(0).getImage()); 
     Picasso.with(context).load(productEntity.getItemEntities().get(0).getImage()).into(imageViewHolder.imageView); 
    } else if(holder instanceof PagerViewHolder) { 
     PagerViewHolder pagerViewHolder = (PagerViewHolder) holder; 
     ProductEntity productEntity = productEntities.get(position); 
     pagerViewHolder.viewPager.setAdapter(new PagerAdapter(fragmentManager,productEntity.getItemEntities())); 
    } else if (holder instanceof HorizontalViewHolder) { 
     HorizontalViewHolder horizontalViewHolder = (HorizontalViewHolder) holder; 
     ProductEntity productEntity = productEntities.get(position); 
     LinearLayoutManager linearLayoutManager = new LinearLayoutManager(context); 
     linearLayoutManager.setOrientation(LinearLayoutManager.HORIZONTAL); 
     horizontalViewHolder.recyclerView.setLayoutManager(linearLayoutManager); 
     horizontalViewHolder.recyclerView.setAdapter(new SliderAdapter(context,productEntity.getItemEntities())); 
    } 

} 

@Override 
public RecyclerView.ViewHolder onCreateViewHolder (ViewGroup parent, int viewType) { 
    if(viewType == TYPE_FIRST) { 
     View v = LayoutInflater.from (parent.getContext()).inflate (R.layout.content_image, parent, false); 
     return new ImageViewHolder (v); 
    } else if(viewType == TYPE_SECOND) { 
     View v = LayoutInflater.from (parent.getContext()).inflate (R.layout.content_horizontal, parent, false); 
     return new HorizontalViewHolder (v); 
    } else { 
     View v = LayoutInflater.from (parent.getContext()).inflate (R.layout.content_pager, parent, false); 
     return new PagerViewHolder(v); 
    } 
} 

@Override 
public int getItemViewType (int position) { 
    if(productEntities.get(position).getTemplate().equalsIgnoreCase(TEMPLATE_FIRST)) { 
     Log.e("Item type",""+TYPE_FIRST); 
     return TYPE_FIRST; 
    } else if(productEntities.get(position).getTemplate().equalsIgnoreCase(TEMPLATE_SECOND)) { 
     Log.e("Item type",""+TYPE_SECOND); 
     return TYPE_SECOND; 
    } else { 
     Log.e("Item type",""+TYPE_THIRD); 
     return TYPE_THIRD; 
    } 
} 

class PagerViewHolder extends RecyclerView.ViewHolder { 
    protected ViewPager viewPager; 

    public PagerViewHolder (View itemView) { 
     super (itemView); 
     this.viewPager = (ViewPager) itemView.findViewById (R.id.viewpager); 
    } 
} 

class ImageViewHolder extends RecyclerView.ViewHolder { 
    protected ImageView imageView; 

    public ImageViewHolder (View itemView) { 
     super (itemView); 
     this.imageView = (ImageView) itemView.findViewById (R.id.image); 
    } 
} 

public class HorizontalViewHolder extends RecyclerView.ViewHolder { 

    protected RecyclerView recyclerView; 

    public HorizontalViewHolder(View v) { 
     super(v); 
     recyclerView = (RecyclerView)v.findViewById(R.id.horizontallist); 
    } 
} 

public void setProduct(List<ProductEntity> data) { 
    productEntities.clear(); 
    productEntities.addAll(data); 
    notifyDataSetChanged(); 
} 

public interface OnItemClickListener { 
    void onItemClick(View view, int position); 
} 

public void SetOnItemClickListener(final OnItemClickListener mItemClickListener) { 
    this.mItemClickListener = mItemClickListener; 
} 
} 

мой взгляд пейджера адаптер:

public class PagerAdapter extends FragmentPagerAdapter { 

private List<ItemEntity> itemEntities; 
public PagerAdapter(FragmentManager fm, List<ItemEntity> itemEntities) { 
    super(fm); 
    this.itemEntities = itemEntities; 
} 

@Override 
public Fragment getItem(int position) { 
    // getItem is called to instantiate the fragment for the given page. 
    // Return a PlaceholderFragment (defined as a static inner class below). 
    return ImageFragment.newInstance(itemEntities.get(position).getImage()); 
} 

@Override 
public int getCount() { 
    // Show 3 total pages. 
    return itemEntities.size(); 
} 
} 

Моя горизонтальная recyclerview адаптер:

public class SliderAdapter extends RecyclerView.Adapter<RecyclerView.ViewHolder> { 
private List<ItemEntity> itemEntities; 
private Context context; 
private OnItemClickListener mItemClickListener; 
public SliderAdapter(Context context , List<ItemEntity> notesEntities) { 
    this.itemEntities = notesEntities; 
    this.context = context; 
} 

@Override 
public int getItemCount() { 
    return itemEntities.size(); 
} 

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

     ItemViewHolder itemViewHolder = (ItemViewHolder) holder; 
     ItemEntity itemEntity = itemEntities.get(position); 
     itemViewHolder.productName.setText(itemEntity.getLabel()); 
     Log.e("Item Image",""+itemEntity.getImage()); 
     if(!TextUtils.isEmpty(itemEntity.getImage())) 
     Picasso.with(context).load(itemEntity.getImage()).into(itemViewHolder.productImage); 
} 

@Override 
public RecyclerView.ViewHolder onCreateViewHolder (ViewGroup parent, int viewType) { 
     View v = LayoutInflater.from (parent.getContext()).inflate (R.layout.recycler_card_layout, parent, false); 
     return new ItemViewHolder (v); 

} 

public class ItemViewHolder extends RecyclerView.ViewHolder { 

    protected TextView productName; 
    protected ImageView productImage; 

    public ItemViewHolder(View v) { 
     super(v); 
     productName = (TextView) v.findViewById(R.id.product_name); 
     productImage = (ImageView) v.findViewById(R.id.product_image); 

     v.setOnClickListener(new View.OnClickListener() { 
      @Override 
      public void onClick(View v) { 
       if (mItemClickListener != null) 
        mItemClickListener.onItemClick(v, getAdapterPosition()); 
      } 
     }); 

    } 
} 

public void setItems(List<ItemEntity> data) { 
    itemEntities.clear(); 
    itemEntities.addAll(data); 
    notifyDataSetChanged(); 

} 

public interface OnItemClickListener { 
    void onItemClick(View view, int position); 
} 

public void SetOnItemClickListener(final OnItemClickListener mItemClickListener) { 
    this.mItemClickListener = mItemClickListener; 
} 

} 

Компонов деятельности:

<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android" 
xmlns:app="http://schemas.android.com/apk/res-auto" 
xmlns:tools="http://schemas.android.com/tools" 
android:layout_width="match_parent" 
android:layout_height="wrap_content" 
app:layout_behavior="@string/appbar_scrolling_view_behavior" 
tools:context=".activity.MainActivity" 
tools:showIn="@layout/activity_main"> 

<android.support.v7.widget.RecyclerView 
android:id="@+id/mainlist" 
android:layout_width="match_parent" 
android:layout_height="match_parent"> 

</android.support.v7.widget.RecyclerView> 
</RelativeLayout> 

Горизонтальная прокрутка раскладка:

<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android" 
xmlns:app="http://schemas.android.com/apk/res-auto" 
xmlns:tools="http://schemas.android.com/tools" 
android:layout_width="match_parent" 
android:layout_height="wrap_content" 
app:layout_behavior="@string/appbar_scrolling_view_behavior" 
tools:context=".activity.MainActivity" 
tools:showIn="@layout/activity_main"> 

<android.support.v7.widget.RecyclerView 
    android:id="@+id/horizontallist" 
    android:layout_width="match_parent" 
    android:layout_height="wrap_content"> 
</android.support.v7.widget.RecyclerView> 
</RelativeLayout> 

Посмотреть пейджером расположение:

<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android" 
android:layout_width="match_parent" 
android:layout_height="wrap_content"> 

<android.support.v4.view.ViewPager 
    android:id="@+id/viewpager" 
    android:layout_width="match_parent" 
    android:layout_height="200dp"> 
</android.support.v4.view.ViewPager> 
</RelativeLayout> 

Согласно моим данным JSON, у него должно быть 2 просмотра пейджера внутри просмотра ресайклера, но он показывает только 1 в портретном режиме, и как только я поворачиваю устройство, оба исчезают. Я ничего не вижу в просмотре recycler, поскольку я вижу пробел в просмотре recycler во время прокрутки.

Любая помощь будет оценена по достоинству.

+0

найдено какое-либо решение по этому вопросу? – apk

+0

Да Я решил эту проблему, назначив динамический идентификатор для просмотра пейджера. просмотр пейджера не может иметь одинаковый идентификатор, поэтому мне нужно динамически добавлять идентификатор. this.viewPager.setId (Id ++); –

+0

hii @SandeepAgrawal, вы можете мне помочь! , если вы можете посоветовать мне или предоставить демо-код. заранее спасибо. Мне нужно иметь ViewPager внутри RecyclerView (аналогично новой функции instagram). Каждая строка RecyclerView будет иметь ViewPager, который позволит прокручивать между некоторыми изображениями или видео. Примечание: просмотрщик с фрагментами. –

ответ

-1

Простое изменение:

extends FragmentPagerAdapter 

в

extends FragmentStatePagerAdapter 
+0

Я уже пробовал это, и он не работает. –

Смежные вопросы