2016-05-29 8 views
1

Ich muss einen E-Commerce-App-Typ Bildschirm mit mehreren Viewpager und Recycler-Ansichten.View Pager in Recycler Ansicht zeigt nicht die Daten in Android

Ich implementierte es, aber meine 1 von 2 Ansicht Pager ist in Recycler sichtbar und sobald ich das Gerät rotiere, verschwinden auch meine ersten Pager.

Meine Aktivität:

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

Meine Ansicht Pager Fragment:

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

Mein Hauptadapter für Recycler Ansicht:

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

Meine Ansicht Pager-Adapter:

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

Mein horizontal recyclerview Adapter:

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

} 

Haupttätigkeit Layout:

<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> 

Horizontales Scrollen Layout:

<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> 

Ansicht Pager Layout:

<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> 

Laut meiner JSON-Daten sollte es 2 Ansicht Pager innerhalb Recycler anzeigen und aber es zeigt nur 1 im Hochformat und sobald ich das Gerät drehen, sind beide verschwunden. Ich weiß, dass Daten in der Recycler-Ansicht nicht sichtbar sind, da ich beim Scrollen weißen Bereich in der Recycler-Ansicht sehen kann.

Jede Hilfe wäre willkommen.

+0

jede Lösung auf diese gefunden? – apk

+0

Ja Ich habe dieses Problem gelöst, indem ich eine dynamische ID zugewiesen habe, um den Pager anzuzeigen. Pager kann nicht dieselbe ID haben, daher muss ich die ID dynamisch hinzufügen. this.viewPager.setId (Id ++); –

+0

hii @SandeepAgrawal, können Sie mir helfen! , wenn Sie mich führen oder Democode bereitstellen können. Vielen Dank im Voraus. Ich brauche einen ViewPager innerhalb einer RecyclerView (ähnlich der neuen Instagram-Funktion), Jede Zeile der RecyclerView wird einen ViewPager haben, der es erlaubt zwischen einigen Bildern oder Videos zu wischen. Hinweis: Viewpager mit Fragmenten. –

Antwort

-1

Einfacher Wechsel:

extends FragmentPagerAdapter 

zu

extends FragmentStatePagerAdapter 
+0

Ich habe es bereits versucht und es funktioniert nicht. –

Verwandte Themen