【发布时间】:2016-01-17 16:03:07
【问题描述】:
我正在尝试构建一个需要在 ListView 中显示 ViewPager 的应用程序。这类似于 FlipKart 或 SnapDeal 应用程序。
虽然我不确定这是他们所做的,所以我只是猜测这可能已经实现。所以,如果有更好的解决方案,那么我当然愿意接受。
我关注了this link 和this link,到目前为止我所做的如下:-
public class MainActivity extends AppCompatActivity {
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
ListView listView= (ListView) findViewById(R.id.listView);
ArrayList<MyPagerAdaper> adapers=new ArrayList<>();
for(int i=0; i<10; i++){
ArrayList<String> list=getNewList();
MyPagerAdaper pagerAdaper=new MyPagerAdaper(list);
adapers.add(pagerAdaper);
}
MyListAdapter listAdapter=new MyListAdapter(adapers);
listView.setAdapter(listAdapter);
}
private ArrayList<String> getNewList() {
ArrayList<String> list=new ArrayList<>();
list.add("Pankaj");
list.add("Manisha");
list.add("Pari");
list.add("Piggy");
list.add("Harish");
return list;
}
private class MyListAdapter extends BaseAdapter{
private ArrayList<MyPagerAdaper> adapers;
private LayoutInflater inflater;
public MyListAdapter(ArrayList<MyPagerAdaper> adapers) {
this.adapers = adapers;
inflater=LayoutInflater.from(getBaseContext());
}
@Override
public int getCount() {
return adapers.size();
}
@Override
public Object getItem(int position) {
return adapers.get(position);
}
@Override
public long getItemId(int position) {
return position;
}
@Override
public View getView(int position, View convertView, ViewGroup parent) {
View view=convertView;
Viewholder viewholder;
if(view==null){
view=inflater.inflate(R.layout.layout_list_item, parent, false);
viewholder=new Viewholder();
viewholder.pager= (ViewPager) view.findViewById(R.id.viewPager);
view.setTag(viewholder);
}else {
viewholder= (Viewholder) view.getTag();
}
MyPagerAdaper adaper= (MyPagerAdaper) getItem(position);
viewholder.pager.setAdapter(adaper);
return view;
}
private class Viewholder{
ViewPager pager;
}
}
private class MyPagerAdaper extends PagerAdapter{
private ArrayList<String> list;
private LayoutInflater inflater;
public MyPagerAdaper(ArrayList<String> list) {
this.list = list;
inflater=LayoutInflater.from(getBaseContext());
}
@Override
public int getCount() {
return list.size();
}
@Override
public Object instantiateItem(ViewGroup container, int position) {
View view=inflater.inflate(R.layout.layout_page, container, false);
TextView textView= (TextView) view.findViewById(R.id.textView);
String s=list.get(position);
textView.setText(s);
container.addView(view);
return view;
}
@Override
public void destroyItem(ViewGroup container, int position, Object object) {
container.removeView((View) object);
}
@Override
public boolean isViewFromObject(View view, Object object) {
return view.equals(object);
}
}
}
我面临的问题是,除了操作栏下方顶部的灰色细条之外,屏幕上什么也没有显示。
编辑1:
抱歉,我错过了 getCount() 方法。我已经进行了更正,但问题仍然存在。
编辑2:
更改后我已经更新了上面的代码。
【问题讨论】:
-
在 MyPagerAdaper 中 getcount 方法仍然返回 0。
-
你现在可以试试。我已经更新了上面的代码。
-
在容器中添加视图后仍然无法正常工作?
-
没有。这些项目正在添加到适配器中,但没有显示出来。
-
避免使用 viewHolder 类并尝试在 layout_list_item 文件中添加视图分页器 xml。并在 MyListAdapter 的 getView() 方法中使用其 id 访问它,并将适配器设置为该 viewpager。 Insted 创建一个新的视图变量使用 convertView 来获取 layout_list_item 文件。试一试,请告诉我它是否有效。我在您的代码中看不到任何其他错误。
标签: android listview android-listview android-viewpager