【发布时间】:2015-07-22 04:40:37
【问题描述】:
我正在尝试让这个工作:我基本上希望在一个 ViewPager 中有两个 Recyclerviews。我遵循了本教程:http://android-java-development.blogspot.de/2012/05/system.html,但它似乎不起作用。我看起来视图寻呼机是空的,并且回收站视图没有显示出来。
这是我的布局代码:
<android.support.v4.widget.SwipeRefreshLayout
android:id="@+id/pager_refresh_layout"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:paddingTop="@dimen/tab_height">
<android.support.v4.view.ViewPager
android:id="@+id/pager"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:background="@color/accent"/>
</android.support.v4.widget.SwipeRefreshLayout>
还有我的 PageAdapter:
public class NewsPagerAdapter extends PagerAdapter {
private Context context;
private Vector<RecyclerView> recyclerViewList;
private String[] titles;
public NewsPagerAdapter(Context context, int titlesId) {
this.context = context;
this.recyclerViewList = new Vector<>();
setTitles(titlesId);
}
public void add(RecyclerView recyclerView) {
recyclerViewList.add(recyclerView);
}
public RecyclerView.Adapter getAdapterForViewAtIndex(int index) {
return recyclerViewList.get(index).getAdapter();
}
@Override
public Object instantiateItem(ViewGroup container, int position) {
container.addView(recyclerViewList.get(position),
new RecyclerView.LayoutParams(ViewGroup.LayoutParams.MATCH_PARENT, 100)
);
return container;
}
@Override
public int getCount() {
return recyclerViewList.size();
}
@Override
public boolean isViewFromObject(View view, Object object) {
return view.equals(object);
}
@Override
public void destroyItem(ViewGroup container, int position, Object object) {
container.removeView((View) object);
}
@Override
public CharSequence getPageTitle(int position) {
return titles[position];
}
public void setTitles(int titles) {
this.titles = context.getResources().getStringArray(titles);
}
}
还有我的 onCreatView 方法:
GridLayoutManager layoutManager1 = new GridLayoutManager(getActivity(), getResources().getInteger(R.integer.news_column_count));
GridLayoutManager layoutManager2 = new GridLayoutManager(getActivity(), getResources().getInteger(R.integer.news_column_count));
RecyclerView listView1 = new RecyclerView(getActivity());
RecyclerView listView2 = new RecyclerView(getActivity());
listView1.setLayoutManager(layoutManager1);
listView2.setLayoutManager(layoutManager2);
NewsAdapter adapter1 = new NewsAdapter(getActivity(), null);
NewsAdapter adapter2 = new NewsAdapter(getActivity(), null);
adapter1.setOnItemClickListener(this);
adapter2.setOnItemClickListener(this);
listView1.setAdapter(adapter1);
listView2.setAdapter(adapter2);
newsPagerAdapter.add(listView1);
newsPagerAdapter.add(listView2);
newsViewPager.setAdapter(newsPagerAdapter);
这里我将光标对象传递给适配器:
@Override
public void onLoadFinished(Loader<Cursor> loader, Cursor data) {
((NewsAdapter) newsPagerAdapter.getAdapterForViewAtIndex(0)).swapCursor(data);
}
【问题讨论】:
-
在我看来,您错过了以编程方式创建的 RecyclerViews 的布局参数。尝试对您的两个视图使用类似
RelativeLayout.LayoutParams params = new RelativeLayout.LayoutParams(LayoutParams.MATCH_PARENT, 100);的内容 -
非常感谢您的回复!不幸的是,回收站视图似乎仍然不可见
-
能否更新一下代码?
-
好的,看看适配器实现
-
我会做两件事,但让我先问你一个问题。你在哪里填充两个 RecyclerViews?如我所见,您将 null 作为 NewsAdapter 中的第二个参数传递(我假设它是集合)。我对吗?没有任何要渲染的项目,RecyclerView 将是空的(不可见)
标签: java android listview android-viewpager android-recyclerview