如何在Android中的一行ListView中显示ViewPager

Posted

技术标签:

【中文标题】如何在Android中的一行ListView中显示ViewPager【英文标题】:How to show ViewPager inside a row of ListView in Android 【发布时间】: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: 更改后我已经更新了上面的代码。

编辑3: 这就是屏​​幕的样子。 任何帮助是极大的赞赏。提前致谢。

【问题讨论】:

在 MyPagerAdaper 中 getcount 方法仍然返回 0。 你现在可以试试。我已经更新了上面的代码。 在容器中添加视图后仍然无法正常工作? 没有。这些项目正在添加到适配器中,但没有显示出来。 避免使用 viewHolder 类并尝试在 layout_list_item 文件中添加视图分页器 xml。并在 MyListAdapter 的 getView() 方法中使用其 id 访问它,并将适配器设置为该 viewpager。 Insted 创建一个新的视图变量使用 convertView 来获取 layout_list_item 文件。试一试,请告诉我它是否有效。我在您的代码中看不到任何其他错误。 【参考方案1】:

在MyPagerAdaper里面,改变这个方法

@Override
    public int getCount() 
        return 0;
    

@Override
    public int getCount() 
        return list.size();
    

Inside instantiateItem methode 像这样向容器添加视图:

 @Override
    public Object instantiateItem(ViewGroup container, int position) 
.
.  
.
container.addView(view);
return view;

【讨论】:

以上是关于如何在Android中的一行ListView中显示ViewPager的主要内容,如果未能解决你的问题,请参考以下文章

Android:ListView在一行中包含所有值

android 怎listview一行显示3个数据

在 ListView 中默认选择一行并突出显示所选行 Android

如何使listView中的一行始终具有相同的颜色android

Android ListView 失去焦点

VB中如何实现单击listview中的一行,让text显示该行某列的值!!