我的RecyclerViewAdapter出了问题。我想用TabLayout,CardView和ViewPager集成来显示我的片段。我没有使用Activity,使用Fragment。我有一个片段。这个片段包含Cardview。此Cardview包含Tablayout和Viewpager。
如何在此适配器中使用getSupportFragmentManager()或如何编辑此适配器?这是我的代码:
RecyclerViewAdapter.java
public class RecyclerViewAdapter extends
RecyclerView.Adapter<RecyclerViewAdapter.MyViewHolder> {
public ArrayList<String> myValues;
public RecyclerViewAdapter (ArrayList<String> myValues){
this.myValues= myValues;
}
@Override
public MyViewHolder onCreateViewHolder(ViewGroup parent, int viewType) {
View listItem = LayoutInflater.from(parent.getContext()).inflate(R.layout.cardview_select_area, parent, false);
return new MyViewHolder(listItem);
}
@Override
public void onBindViewHolder(MyViewHolder holder, int position) {
}
@Override
public int getItemCount() {
return myValues.size();
}
public class MyViewHolder extends RecyclerView.ViewHolder {
private TextViewPoppins myTextView;
private TabItem tab_loc,tab_area;
private ViewPager viewPager;
private TabLayout tabLayout;
public MyViewHolder(View itemView)
{
super(itemView);
myTextView = (TextViewPoppins)itemView.findViewById(R.id.select_area);
tabLayout = (TabLayout) itemView.findViewById(R.id.tabs);
tab_loc= (TabItem) itemView.findViewById(R.id.tab_loc);
tab_area= (TabItem) itemView.findViewById(R.id.tab_area);
tabLayout.addTab(tabLayout.newTab().setIcon(R.drawable.ic_location_green));
tabLayout.addTab(tabLayout.newTab().setIcon(R.drawable.ic_kort));
viewPager = (ViewPager) itemView.findViewById(R.id.viewpager);
setupViewPager(viewPager);
}
}
private void setupViewPager(ViewPager viewPager)
{
ViewPagerAdapter adapter = new
ViewPagerAdapter(getSupportFragmentManager());
//this line gives the error.
adapter.addFragment(new LocationFragment(), "ONE");
adapter.addFragment(new AreaFragment(), "TWO");
viewPager.setAdapter(adapter);
}
class ViewPagerAdapter extends FragmentPagerAdapter
{
private final List<Fragment> mFragmentList = new ArrayList<>();
private final List<String> mFragmentTitleList = new ArrayList<>();
public ViewPagerAdapter(FragmentManager manager)
{
super(manager);
}
@Override
public Fragment getItem(int position)
{
return mFragmentList.get(position);
}
@Override
public int getCount() {
return mFragmentList.size();
}
public void addFragment(Fragment fragment, String title)
{
mFragmentList.add(fragment);
mFragmentTitleList.add(title);
}
@Override
public CharSequence getPageTitle(int position) {
return mFragmentTitleList.get(position);
}
}
}
答案 0 :(得分:1)
这是我认为你打算做的:ReyclerView - &gt;片段 - &gt; TabLayout和ViewPager的活动。这就是您实现这一目标的方法:首先,您设置ViewPager
和TabLayout
(&#34; setupViewPager&#34;)的方法应该在Activity
中,其中{ {1}}或getFragmentManger()
如果您正在使用getSupportFragmentManager()
。但是,您的适配器类可以位于另一个文件中。
其次,您似乎也试图将AppCompatActivity
和TabLayout
放入ViewPager
。 ViewHolders用于ViewHolder
列表,不用于横向导航。把这段代码从课堂上拿出来:
RecyclerView
最后,以下是tabLayout = (TabLayout) itemView.findViewById(R.id.tabs);
tab_loc= (TabItem) itemView.findViewById(R.id.tab_loc);
tab_area= (TabItem) itemView.findViewById(R.id.tab_area);
tabLayout.addTab(tabLayout.newTab().setIcon(R.drawable.ic_location_green));
tabLayout.addTab(tabLayout.newTab().setIcon(R.drawable.ic_kort));
viewPager = (ViewPager) itemView.findViewById(R.id.viewpager);
setupViewPager(viewPager);
下的MainActivity中的内容:
onCreate
Here是一个额外的链接参考。
答案 1 :(得分:0)
在MainActivity.java中移动ViewPagerAdapter类,并在MainActivity.java中的onCreate()方法中设置ViewPager。 getSupportFragmentManager()仅在您的类扩展Activity时才有效。 看看这个: Cannot call getSupportFragmentManager() from activity
答案 2 :(得分:0)
在setupViewPager(viewPager);
内尝试onBindViewHolder
,我认为这应该可以解决您的问题。
@Override
public void onBindViewHolder(MyViewHolder holder, int position) {
setupViewPager(holder.viewPager);
}