在列表视图查看传呼机? [英] View Pager in listview?

查看:147
本文介绍了在列表视图查看传呼机?的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

我使用的视图寻呼机在列表视图项。我想说明的观点寻呼机,但延迟加载不工作与它的图像。请给我任何的解决方案。我已经尝试了很多懒加载的文件,但一些工作。有些人抱着UI。

而我使用的是现在的code的工作不错,但没有显示,第一次图像。我需要向下滚动列表视图,然后滚动起来那么只有它显示。我不知道是什么问题,请给我一些解决方案,我有什么做的?

我张贴适配器我的code: -

这是我getview code:

 公开查看getView(最终诠释的立场,观点convertView,ViewGroup中父){

        视图V = convertView;
        如果(V == NULL){
            LayoutInflater mInflater =(LayoutInflater)objProp.activity
                    .getApplicationContext()。getSystemService(
                            Context.LAYOUT_INFLATER_SERVICE);
            V = mInflater.inflate(R.layout.adapter_walllayout,NULL);
        }

        //获取控制

        最后viewHolder VH =新viewHolder();
        vh.txtview_Question =(TextView中)v.findViewById(R.id.textView1);
        vh.textview_CommentCount =(TextView中)V
                .findViewById(R.id.textVew_WallTotalComments);
        vh.textview_LikeCount =(TextView中)V
                .findViewById(R.id.textVew_WallTotalokay);
        vh.ViewPager_Images =(ViewPager)v.findViewById(R.id.pager);
        vh.imageview_Profile =(ImageView的)V
                .findViewById(R.id.imageview_userImage);
        vh.textview_PostDate =(TextView中)V
                .findViewById(R.id.textView_PostDate);

        vh.textview_UserName =(TextView中)V
                .findViewById(R.id.textVew_WallUserName);

        // SetDatato控制

        //设置数据
        vh.txtview_Question
                .setText(objProp.wallDataList.get(位置).wallPost_Name);
        vh.txtview_Question.setTypeface(fontsFamily.getFont(
                objProp.activity.getApplicationContext(),真));

        vh.textview_UserName
                .setText(objProp.wallDataList.get(位置).wallPost_User_Name);
        vh.textview_UserName.setTypeface(fontsFamily.getFont(
                objProp.activity.getApplicationContext(),真));


        最终矢量<视图>页=新矢量<视图>();

        objProp.activity.runOnUiThread(新的Runnable(){

            @覆盖
            公共无效的run(){

                vh.ViewPager_Images.setOffscreenPageLimit(4);

                的for(int i = 0; I< objProp.wallDataList.get(位置).wallPost_Images_Data
                        。尺寸()​​;我++){

                    最终诠释imagePosion =我;
                    LayoutInflater mInflaterImage =(LayoutInflater)objProp.activity
                            .getApplicationContext()。getSystemService(
                                    Context.LAYOUT_INFLATER_SERVICE);
                    查看VIMAGE = mInflaterImage.inflate(
                            R.layout.wallimagepageradaper,NULL);

                    ImageView的ImageView的=(ImageView的)VIMAGE
                            .findViewById(R.id.imageView1);
                    imageView.setTag(objProp.wallDataList.get(位置).wallPost_Images_Data
                            获得(一).qst_Wall_Image);
                    复选框CHK =(复选框)VIMAGE
                            .findViewById(R.id.checkBox1);

                    / *
                     * loadLooksImages.fetchDrawableOnThread(objProp.wallDataList
                     *获得(位置).wallPost_Images_Data
                     *获得(一).qst_Wall_Image,ImageView的);
                     * /



                    imageLoader_RelativeLayout.DisplayImage(
                            objProp.wallDataList.get(位置).wallPost_Images_Data
                                    获得(一).qst_Wall_Image,ImageView的);
                    /*imageLoader_RelativeLayout.DisplayImage(
                            objProp.wallDataList.get(位置).wallPost_Images_Data
                                    获得(一).qst_Wall_Image,ImageView的);
                     * /
                    //获取控制

                    vh.percentageLayout =(RelativeLayout的)VIMAGE
                            .findViewById(R.id.layoutPercent);
                    vh.percentageLayout.setVisibility(View.GONE);
                    vh.percentageLayout.setId(objProp.wallDataList
                            获得(位置).wallPost_Images_Data
                            获得(imagePosion).qst_Wall_ImageID);

                    vh.textView_Percentage =(TextView中)VIMAGE
                            .findViewById(R.id.textView_PercentCount);
                    vh.textView_percentVoteCount =(TextView中)VIMAGE
                            .findViewById(R.id.textView1_PercentVoteCount);

                    //设置数据
                    双D = Double.parseDouble(objProp.wallDataList
                            获得(位置).wallPost_Images_Data.get(一).qst_Wall_Image_Percentage);
                    INT VAL = d.intValue();
                    vh.textView_Percentage.setText(VAL +%);
                    vh.textView_Percentage.setTypeface(fontsFamily.getFont(
                            objProp.activity.getApplicationContext(),真));

                    vh.textView_percentVoteCount.setTypeface(fontsFamily
                            .getFont(objProp.activity.getApplicationContext(),
                                    真正));
                    vh.textView_percentVoteCount.setText(objProp.wallDataList
                            获得(位置).wallPost_Images_Data.get(我).qst_Wall_Image_LikeCount
                            +投票);

                    chk.setOnCheckedChangeListener(新OnCheckedChangeListener(){

                        @覆盖
                        公共无效onCheckedChanged(CompoundButton buttonView,
                                布尔器isChecked){
                            新Service_LikeImage(objProp.activity)
                                    .execute(objProp.wallDataList.get(位置).wallPost_Images_Data
                                            获得(imagePosion).qst_Wall_ImageID
                                            +);

                            RelativeLayout的布局=(RelativeLayout的)objProp.activity
                                    .findViewById(objProp.wallDataList
                                            获得(位置).wallPost_Images_Data
                                            获得(imagePosion).qst_Wall_ImageID);
                            lay.setVisibility(View.VISIBLE);

                        }
                    });

                    // //system.out.println("OKKKKKK+ I);
                    pages.add(VIMAGE);

                }

            }
        });

        //的System.out.println(AAA+ pages.size());
        CustomPagerAdapter ADAP =新CustomPagerAdapter(
                objProp.activity.getApplicationContext(),页);
        vh.ViewPager_Images.setAdapter(ADAP);

        vh.textview_CommentCount.setOnClickListener(新OnClickListener(){

            @覆盖
            公共无效的onClick(视图v){

                意向意图=新的意图(objProp.activity,OkayComments.class);
                intent.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
                intent.putExtra(wallPostPosition,位置);
                intent.putExtra(imageNumber,imagePsotioninPager);
                objProp.activity.startActivity(意向);

            }
        });

        vh.textview_LikeCount.setOnClickListener(新OnClickListener(){

            @覆盖
            公共无效的onClick(视图v){

                意向意图=新的意图(objProp.activity,Results.class);
                intent.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
                intent.putExtra(Q code,
                        objProp.wallDataList.get(位置).wallPost_ID);
                objProp.activity.startActivity(意向);
            }
        });

        imageLoader.DisplayImage(
                objProp.wallDataList.get(位置).wallPost_User_Image,
                vh.imageview_Profile);

        字符串totComments = objProp.wallDataList.get(位置).wallPost_Images_Data
                获得(0).qst_Wall_Image_CommentCount +;

        vh.textview_CommentCount.setText(totComments +意见);
        vh.textview_CommentCount.setTypeface(fontsFamily.getFont(
                objProp.activity.getApplicationContext(),真));

        vh.textview_LikeCount
                .setText(objProp.wallDataList.get(位置).wallPost_Images_Data
                        获得(0).qst_Wall_Image_LikeCount +好);

        vh.textview_LikeCount.setTypeface(fontsFamily.getFont(
                objProp.activity.getApplicationContext(),真));

        返回伏;

    }

    公共类viewHolder {
        TextView的txtview_Question;
        TextView的textview_CommentCount;
        TextView的textview_LikeCount;
        TextView的textview_UserName;
        TextView的textview_PostDate;
        ViewPager ViewPager_Images;
        ImageView的imageview_Profile;

        TextView的textView_Percentage;
        TextView的textView_percentVoteCount;
        RelativeLayout的percentageLayout;

        //形象ViewPager
        ImageView的imageView_PostImage;

    }
 

解决方案

首先, ..我不是很确定问题的严重性可能是因为你试图使用视图寻呼机作为一个列表鉴于项目。这并不是说不能完成的,但它只是有太多层回​​事。希望你会AP preciate工作并投入这块code中的努力,我希望这将有助于解决您issue..So请欣赏code ..:)

1)有2个适配器在这种情况下。    首先进行的ListView    其次为ViewPager

2)两款适配器具有不同的功能和列表项。

3)您在另一个适配器使用一个适配器。

4),然后你用最后的适配器膨胀的ListView和设置适配器...:D

以下是如何code云:我会做一步一步

第1步:制作一个简单的模型类:

 公共类ModelClass {


        私人字符串titleToDisplay;



        公共ModelClass(字符串问题){
            超();
            this.titleToDisplay =问题;
        }

        公共字符串getTitleToDisplay(){
            返回titleToDisplay;
        }

        公共无效setTitleToDisplay(字符串titleToDisplay){
            this.titleToDisplay = titleToDisplay;
        }
}
 

第二步:制作一个观点寻呼机适配器和充气它将模型类项目。这是基本的观点寻呼机适配器!!

 公共类ViewPagerAdapter扩展PagerAdapter {

    ArrayList的< ModelClass> arrayModelClasses =新的ArrayList< ModelClass>();

    @燮pressLint(NewApi)
    @覆盖
    公共无效finishUpdate(集装箱的ViewGroup){
        // TODO自动生成方法存根
        super.finishUpdate(容器);

    }

    公共ViewPagerAdapter(){

        超();

    }

    公共ViewPagerAdapter(ArrayList中< ModelClass> arrayModelClasses){

        超();
        this.arrayModelClasses = arrayModelClasses;

    }

    @覆盖
    公众诠释getCount将(){

        返回arrayModelClasses.size();

    }

    @覆盖
    公共布尔isViewFromObject(查看集合,Object对象){

        返回集合==((查看)对象);
    }

    @覆盖
    公共对象instantiateItem(查看收集,INT位置){

        //充气布局
        LayoutInflater充气=(LayoutInflater)collection.getContext()
                .getSystemService(Context.LAYOUT_INFLATER_SERVICE);

        查看查看= inflater.inflate(R.layout.drawer_list_item,NULL);

        TextView的itemText =(TextView中)view.findViewById(R.id.title);

        尝试 {

            itemText.setText(arrayModelClasses.get(位置)
                    .getTitleToDisplay());

        }赶上(例外E1){
            // TODO自动生成的catch块
            e1.printStackTrace();
        }
        ((ViewPager)集合).addView(查看,0);
        返回查看;

    }

    @覆盖
    公共无效destroyItem(View容器,INT位置,Object对象){
        ((ViewPager)容器).removeView((查看)对象);
    }

}
 

第三步:使适配器为ListView

注意:这是我现在用的是previous适配器,并在此适配器我使用的视图寻呼机作为项目

 公共类ListViewPagerAdapter扩展ArrayAdapter< ModelClass> {

    ViewPagerAdapter mViewPagerAdapter;
    私人上下文的背景下;
    私人的ArrayList< ModelClass> navigationItems;
    私人诠释的selectedIndex;

    公共ListViewPagerAdapter(上下文的背景下,
            ArrayList的< ModelClass> navigationItems){
        超(背景下,R.layout.view_pager_list_view,navigationItems);
        this.context =背景;
        this.navigationItems = navigationItems;
    }

    @覆盖
    公众诠释getCount将(){

        返回navigationItems.size();
    }

    公共无效的setSelectedIndex(INT位置){
        的selectedIndex =位置;
        notifyDataSetChanged();
    }

    @覆盖
    公共ModelClass的getItem(INT位置){

        返回navigationItems.get(位置);
    }

    @覆盖
    众长getItemId(INT位置){

        返回的位置;
    }

    @燮pressLint(NewApi)
    @覆盖
    公共查看getView(INT位置,查看convertView,ViewGroup中父){

        如果(convertView == NULL){

            LayoutInflater充气=(LayoutInflater)上下文
                    .getSystemService(Activity.LAYOUT_INFLATER_SERVICE);
            convertView = inflater.inflate(R.layout.view_pager_list_view,NULL);
        }

        ViewPager VP =(ViewPager)convertView.findViewById(R.id.list_pager);
        如果(!的selectedIndex = -1&功放;&安培;仓位==的selectedIndex){
            vp.setBackground(的getContext()。getResources()。getDrawable(
                    R.drawable.gradient_selected));
        } 其他 {
            vp.setBackground(的getContext()。getResources()。getDrawable(
                    R.drawable.gradient));
        }

        mViewPagerAdapter =新ViewPagerAdapter(navigationItems);
        vp.setAdapter(mViewPagerAdapter);

        返回convertView;
    }

}
 

第四步:我设置这最后的适配器(ListViewPagerAdapter),以我的列表视图

注意:在这里,我在我的片段酮使用该适配器。您可以使用此只需在您的正常活动课,它也可以工作。

 公共类CampaignView扩展片段{

    ListViewPagerAdapter listViewPagerAdapter;

    公共CampaignView(){
    }

    @覆盖
    公共查看onCreateView(LayoutInflater充气,容器的ViewGroup,
            捆绑savedInstanceState){

        查看campainview = inflater.inflate(R.layout.campaignview,集装箱,
                假);

        返回campainview;
    }

    @覆盖
    公共无效onActivityCreated(包savedInstanceState){
        // TODO自动生成方法存根
        super.onActivityCreated(savedInstanceState);

        串[] S = {一个,B,C,D,B,C,D,B,C,D,B,
                的C,D,B,C,D,B,C,D};

        ArrayList的< ModelClass> ALIST =新的ArrayList< ModelClass>();

        对于(字符串S1:秒){

            aList.add(新ModelClass(S1));

        }

        ListView控件LV1 =(ListView控件)getActivity()。findViewById(
                R.id.campaignListView);
        // lv1.setAdapter(新ArrayAdapter<字符串>(getActivity()
        // android.R.layout.simple_list_item_1,ALIST));
        listViewPagerAdapter =新ListViewPagerAdapter(getActivity(),ALIST);
        lv1.setAdapter(listViewPagerAdapter);

    }

}
 

最后,很少有布局片段为这个code。

第一: ListView控件本身:

 <的ListView
        机器人:ID =@ + ID / campaignListView
        机器人:layout_width =match_parent
        机器人:layout_height =WRAP_CONTENT>
    < / ListView控件>
 

二:的ViagerLayoutItem(行项目):

 < XML版本=1.0编码=UTF-8&GT?;
< LinearLayout中的xmlns:机器人=htt​​p://schemas.android.com/apk/res/android
    机器人:layout_width =match_parent
    机器人:layout_height =match_parent
    机器人:方向=垂直>


    < android.support.v4.view.ViewPager
            机器人:ID =@ + ID / list_pager
            机器人:layout_width =match_parent
            机器人:layout_height =400dp
            机器人:paddingTop =10dp/>

< / LinearLayout中>
 

最后:对于ListView项目的抽屉列表项:

 < XML版本=1.0编码=UTF-8&GT?;
< LinearLayout中的xmlns:机器人=htt​​p://schemas.android.com/apk/res/android
    机器人:layout_width =match_parent
    机器人:layout_height =40dp
    机器人:后台=#303030
    机器人:方向=垂直>

    <的LinearLayout
        机器人:layout_width =match_parent
        机器人:layout_height =WRAP_CONTENT
        机器人:后台=#303030
        机器人:方向=横向>

        < ImageView的
            机器人:ID =@ + ID /图标
            机器人:layout_width =25dp
            机器人:layout_height =WRAP_CONTENT
            机器人:layout_marginLeft =12dp
            机器人:layout_marginRight =12dp
            机器人:contentDescription =图标
            机器人:SRC =@可绘制/ ic_launcher/>

        <的TextView
            机器人:ID =@ + ID /标题
            机器人:layout_width =match_parent
            机器人:layout_height =WRAP_CONTENT
            机器人:layout_gravity =中心
            机器人:背景=@机器人:彩色/ darker_gray
            机器人:=了minHeight18dp
            机器人:填充=20dp
            机器人:paddingRight =40dp
            机器人:文本=家
            机器人:文字颜色=#33b5e5
            机器人:TEXTSIZE =20SP
            机器人:TEXTSTYLE =黑体/>
    < / LinearLayout中>

< / LinearLayout中>
 

图像的工作:

不要让我知道,如果有任何形式的怀疑与此code。我会很乐意回答。

希望你喜欢它,我希望ü所有最好的实现这个..我花了几分钟,在这片code ..希望这有助于大家..好运..:)

I am using view pager in listview item. I want to show images in view pager but the lazy loading is not working with it. Please give me any solution. I have tried many lazy loading files but some are working. Some are holding the UI.

The code which I'm using now is working good but not showing the images for the first time. I have to scroll down the listview then scroll up then only it is showing. I don't know what is the problem please give me some solution what I have to do?

I am posting my code of adapter :-

This is my getview code:

public View getView(final int position, View convertView, ViewGroup parent) {

        View v = convertView;
        if (v == null) {
            LayoutInflater mInflater = (LayoutInflater) objProp.activity
                    .getApplicationContext().getSystemService(
                            Context.LAYOUT_INFLATER_SERVICE);
            v = mInflater.inflate(R.layout.adapter_walllayout, null);
        }

        // Get Controls

        final viewHolder vh = new viewHolder();
        vh.txtview_Question = (TextView) v.findViewById(R.id.textView1);
        vh.textview_CommentCount = (TextView) v
                .findViewById(R.id.textVew_WallTotalComments);
        vh.textview_LikeCount = (TextView) v
                .findViewById(R.id.textVew_WallTotalokay);
        vh.ViewPager_Images = (ViewPager) v.findViewById(R.id.pager);
        vh.imageview_Profile = (ImageView) v
                .findViewById(R.id.imageview_userImage);
        vh.textview_PostDate = (TextView) v
                .findViewById(R.id.textView_PostDate);

        vh.textview_UserName = (TextView) v
                .findViewById(R.id.textVew_WallUserName);

        // SetDatato controls

        // Set Data
        vh.txtview_Question
                .setText(objProp.wallDataList.get(position).wallPost_Name);
        vh.txtview_Question.setTypeface(fontsFamily.getFont(
                objProp.activity.getApplicationContext(), true));

        vh.textview_UserName
                .setText(objProp.wallDataList.get(position).wallPost_User_Name);
        vh.textview_UserName.setTypeface(fontsFamily.getFont(
                objProp.activity.getApplicationContext(), true));


        final Vector<View> pages = new Vector<View>();

        objProp.activity.runOnUiThread(new Runnable() {

            @Override
            public void run() {

                vh.ViewPager_Images.setOffscreenPageLimit(4);

                for (int i = 0; i < objProp.wallDataList.get(position).wallPost_Images_Data
                        .size(); i++) {

                    final int imagePosion = i;
                    LayoutInflater mInflaterImage = (LayoutInflater) objProp.activity
                            .getApplicationContext().getSystemService(
                                    Context.LAYOUT_INFLATER_SERVICE);
                    View vImage = mInflaterImage.inflate(
                            R.layout.wallimagepageradaper, null);

                    ImageView imageView = (ImageView) vImage
                            .findViewById(R.id.imageView1);
                    imageView.setTag(objProp.wallDataList.get(position).wallPost_Images_Data
                            .get(i).qst_Wall_Image);
                    CheckBox chk = (CheckBox) vImage
                            .findViewById(R.id.checkBox1);

                    /*
                     * loadLooksImages.fetchDrawableOnThread(objProp.wallDataList
                     * .get(position).wallPost_Images_Data
                     * .get(i).qst_Wall_Image, imageView);
                     */



                    imageLoader_RelativeLayout.DisplayImage(
                            objProp.wallDataList.get(position).wallPost_Images_Data
                                    .get(i).qst_Wall_Image, imageView);
                    /*imageLoader_RelativeLayout.DisplayImage(
                            objProp.wallDataList.get(position).wallPost_Images_Data
                                    .get(i).qst_Wall_Image, imageView);
                     */
                    // Get Controls

                    vh.percentageLayout = (RelativeLayout) vImage
                            .findViewById(R.id.layoutPercent); 
                    vh.percentageLayout.setVisibility(View.GONE);
                    vh.percentageLayout.setId(objProp.wallDataList
                            .get(position).wallPost_Images_Data
                            .get(imagePosion).qst_Wall_ImageID);

                    vh.textView_Percentage = (TextView) vImage
                            .findViewById(R.id.textView_PercentCount);
                    vh.textView_percentVoteCount = (TextView) vImage
                            .findViewById(R.id.textView1_PercentVoteCount);

                    // Set Data
                    Double d = Double.parseDouble(objProp.wallDataList
                            .get(position).wallPost_Images_Data.get(i).qst_Wall_Image_Percentage);
                    int val = d.intValue();
                    vh.textView_Percentage.setText(val + "%");
                    vh.textView_Percentage.setTypeface(fontsFamily.getFont(
                            objProp.activity.getApplicationContext(), true));

                    vh.textView_percentVoteCount.setTypeface(fontsFamily
                            .getFont(objProp.activity.getApplicationContext(),
                                    true));
                    vh.textView_percentVoteCount.setText(objProp.wallDataList
                            .get(position).wallPost_Images_Data.get(i).qst_Wall_Image_LikeCount
                            + " Votes");

                    chk.setOnCheckedChangeListener(new OnCheckedChangeListener() {

                        @Override
                        public void onCheckedChanged(CompoundButton buttonView,
                                boolean isChecked) {
                            new Service_LikeImage(objProp.activity)
                                    .execute(objProp.wallDataList.get(position).wallPost_Images_Data
                                            .get(imagePosion).qst_Wall_ImageID
                                            + "");

                            RelativeLayout lay = (RelativeLayout) objProp.activity
                                    .findViewById(objProp.wallDataList
                                            .get(position).wallPost_Images_Data
                                            .get(imagePosion).qst_Wall_ImageID);
                            lay.setVisibility(View.VISIBLE);

                        }
                    });

                    // //system.out.println("OKKKKKK "+i);
                    pages.add(vImage);

                }

            }
        });

        // system.out.println("aaa  "+pages.size());
        CustomPagerAdapter adap = new CustomPagerAdapter(
                objProp.activity.getApplicationContext(), pages);
        vh.ViewPager_Images.setAdapter(adap);

        vh.textview_CommentCount.setOnClickListener(new OnClickListener() {

            @Override
            public void onClick(View v) {

                Intent intent = new Intent(objProp.activity, OkayComments.class);
                intent.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
                intent.putExtra("wallPostPosition", position);
                intent.putExtra("imageNumber", imagePsotioninPager);
                objProp.activity.startActivity(intent);

            }
        });

        vh.textview_LikeCount.setOnClickListener(new OnClickListener() {

            @Override
            public void onClick(View v) {

                Intent intent = new Intent(objProp.activity, Results.class);
                intent.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
                intent.putExtra("qcode",
                        objProp.wallDataList.get(position).wallPost_ID);
                objProp.activity.startActivity(intent);
            }
        });

        imageLoader.DisplayImage(
                objProp.wallDataList.get(position).wallPost_User_Image,
                vh.imageview_Profile);

        String totComments = objProp.wallDataList.get(position).wallPost_Images_Data
                .get(0).qst_Wall_Image_CommentCount + "";

        vh.textview_CommentCount.setText(totComments + " Comments");
        vh.textview_CommentCount.setTypeface(fontsFamily.getFont(
                objProp.activity.getApplicationContext(), true));

        vh.textview_LikeCount
                .setText(objProp.wallDataList.get(position).wallPost_Images_Data
                        .get(0).qst_Wall_Image_LikeCount + " Okay");

        vh.textview_LikeCount.setTypeface(fontsFamily.getFont(
                objProp.activity.getApplicationContext(), true));

        return v;

    }

    public class viewHolder {
        TextView txtview_Question;
        TextView textview_CommentCount;
        TextView textview_LikeCount;
        TextView textview_UserName;
        TextView textview_PostDate;
        ViewPager ViewPager_Images;
        ImageView imageview_Profile;

        TextView textView_Percentage;
        TextView textView_percentVoteCount;
        RelativeLayout percentageLayout;

        // Image in ViewPager
        ImageView imageView_PostImage;

    }

解决方案

First of all..I am not very sure how serious this can be because you are trying to use view pager as an list view item. It's not that it cannot be accomplished but it's just that there's too many layers going on here. Hope you will appreciate the work and the efforts put into this piece of code and I hope that this will help solve you issue..So please enjoy the code..:)

1) There are 2 adapter in this case. First for ListView Second for ViewPager

2) Both adapters have different functions and list items.

3) You use one adapter in the other adapter.

4) Then you use the final adapter to inflate your ListView and set the adapter...:D

Here's how the code goes: I will be doing it step by step

Step 1: Making a simple model class:

 public class ModelClass {


        private String titleToDisplay;



        public ModelClass(String question) {
            super();
            this.titleToDisplay = question;
        }

        public String getTitleToDisplay() {
            return titleToDisplay;
        }

        public void setTitleToDisplay(String titleToDisplay) {
            this.titleToDisplay = titleToDisplay;
        }
}

Step 2: Making a view pager Adapter and inflating it will the model class items. This is basic view pager adapter!!

public class ViewPagerAdapter extends PagerAdapter {

    ArrayList<ModelClass> arrayModelClasses = new ArrayList<ModelClass>();

    @SuppressLint("NewApi")
    @Override
    public void finishUpdate(ViewGroup container) {
        // TODO Auto-generated method stub
        super.finishUpdate(container);

    }

    public ViewPagerAdapter() {

        super();

    }

    public ViewPagerAdapter(ArrayList<ModelClass> arrayModelClasses) {

        super();
        this.arrayModelClasses = arrayModelClasses;

    }

    @Override
    public int getCount() {

        return arrayModelClasses.size();

    }

    @Override
    public boolean isViewFromObject(View collection, Object object) {

        return collection == ((View) object);
    }

    @Override
    public Object instantiateItem(View collection, int position) {

        // Inflating layout
        LayoutInflater inflater = (LayoutInflater) collection.getContext()
                .getSystemService(Context.LAYOUT_INFLATER_SERVICE);

        View view = inflater.inflate(R.layout.drawer_list_item, null);

        TextView itemText = (TextView) view.findViewById(R.id.title);

        try {

            itemText.setText(arrayModelClasses.get(position)
                    .getTitleToDisplay());

        } catch (Exception e1) {
            // TODO Auto-generated catch block
            e1.printStackTrace();
        }
        ((ViewPager) collection).addView(view, 0);
        return view;

    }

    @Override
    public void destroyItem(View container, int position, Object object) {
        ((ViewPager) container).removeView((View) object);
    }

}

Step 3: Making the adapter for the ListView

NOTE: This is where I am using the previous adapter and in this adapter I am using the view pager as the list item.

public class ListViewPagerAdapter extends ArrayAdapter<ModelClass> {

    ViewPagerAdapter mViewPagerAdapter;
    private Context context;
    private ArrayList<ModelClass> navigationItems;
    private int selectedIndex;

    public ListViewPagerAdapter(Context context,
            ArrayList<ModelClass> navigationItems) {
        super(context, R.layout.view_pager_list_view, navigationItems);
        this.context = context;
        this.navigationItems = navigationItems;
    }

    @Override
    public int getCount() {

        return navigationItems.size();
    }

    public void setSelectedIndex(int position) {
        selectedIndex = position;
        notifyDataSetChanged();
    }

    @Override
    public ModelClass getItem(int position) {

        return navigationItems.get(position);
    }

    @Override
    public long getItemId(int position) {

        return position;
    }

    @SuppressLint("NewApi")
    @Override
    public View getView(int position, View convertView, ViewGroup parent) {

        if (convertView == null) {

            LayoutInflater inflater = (LayoutInflater) context
                    .getSystemService(Activity.LAYOUT_INFLATER_SERVICE);
            convertView = inflater.inflate(R.layout.view_pager_list_view, null);
        }

        ViewPager vp = (ViewPager) convertView.findViewById(R.id.list_pager);
        if (selectedIndex != -1 && position == selectedIndex) {
            vp.setBackground(getContext().getResources().getDrawable(
                    R.drawable.gradient_selected));
        } else {
            vp.setBackground(getContext().getResources().getDrawable(
                    R.drawable.gradient));
        }

        mViewPagerAdapter = new ViewPagerAdapter(navigationItems);
        vp.setAdapter(mViewPagerAdapter);

        return convertView;
    }

}

Step 4: I am setting this last adapter("ListViewPagerAdapter ") to my listview.

NOTE: Here I am using this adapter in one of my fragments. You can use this simply on your normal Activity Class and it will work too.

public class CampaignView extends Fragment {

    ListViewPagerAdapter listViewPagerAdapter;

    public CampaignView() {
    }

    @Override
    public View onCreateView(LayoutInflater inflater, ViewGroup container,
            Bundle savedInstanceState) {

        View campainview = inflater.inflate(R.layout.campaignview, container,
                false);

        return campainview;
    }

    @Override
    public void onActivityCreated(Bundle savedInstanceState) {
        // TODO Auto-generated method stub
        super.onActivityCreated(savedInstanceState);

        String[] s = { "a", "b", "c", "d", "b", "c", "d", "b", "c", "d", "b",
                "c", "d", "b", "c", "d", "b", "c", "d" };

        ArrayList<ModelClass> aList = new ArrayList<ModelClass>();

        for (String s1 : s) {

            aList.add(new ModelClass(s1));

        }

        ListView lv1 = (ListView) getActivity().findViewById(
                R.id.campaignListView);
        // lv1.setAdapter(new ArrayAdapter<String>(getActivity(),
        // android.R.layout.simple_list_item_1,aList));
        listViewPagerAdapter = new ListViewPagerAdapter(getActivity(), aList);
        lv1.setAdapter(listViewPagerAdapter);

    }

}

Lastly, there are few layouts snippets for this code.

First: The listview itself:

    <ListView
        android:id="@+id/campaignListView"
        android:layout_width="match_parent"
        android:layout_height="wrap_content" >
    </ListView>

Second: The ViagerLayoutItem(row items):

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:orientation="vertical" >


    <android.support.v4.view.ViewPager
            android:id="@+id/list_pager"
            android:layout_width="match_parent"
            android:layout_height="400dp" 
            android:paddingTop="10dp"/>

</LinearLayout>

Lastly: The drawer list items for the listview items:

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:layout_width="match_parent"
    android:layout_height="40dp"
    android:background="#303030"
    android:orientation="vertical" >

    <LinearLayout
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:background="#303030"
        android:orientation="horizontal" >

        <ImageView
            android:id="@+id/icon"
            android:layout_width="25dp"
            android:layout_height="wrap_content"
            android:layout_marginLeft="12dp"
            android:layout_marginRight="12dp"
            android:contentDescription="Icon"
            android:src="@drawable/ic_launcher" />

        <TextView
            android:id="@+id/title"
            android:layout_width="match_parent"
            android:layout_height="wrap_content"
            android:layout_gravity="center"
            android:background="@android:color/darker_gray"
            android:minHeight="18dp"
            android:padding="20dp"
            android:paddingRight="40dp"
            android:text="home"
            android:textColor="#33b5e5"
            android:textSize="20sp"
            android:textStyle="bold" />
    </LinearLayout>

</LinearLayout>

Image for the work :

Do let me know if there's any kind of doubts with this code. I will be happy to answer.

Hope you enjoyed it and I wish u all the best to implement this.. I spent few mins on this piece of code.. Hope this helps everyone.. Good Luck .. :)

这篇关于在列表视图查看传呼机?的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆