在列表视图中查看寻呼机?

时间:2014-06-08 15:01:35

标签: android listview android-viewpager lazy-loading

我在listview项目中使用view pager。我想在视图寻呼机中显示图像,但延迟加载不能使用它。请给我任何解决方案。我尝试了很多延迟加载文件,但有些正在运行。有些人持有UI。

我现在使用的代码工作正常,但第一次没有显示图像。我必须向下滚动列表视图然后向上滚动然后才显示。我不知道问题是什么,请给我解决一下我必须做的事情?

我发布了适配器代码: -

这是我的getview代码:

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;

    }

2 个答案:

答案 0 :(得分:12)

首先 ..我不太确定这有多严重,因为您正在尝试将视图寻呼机用作列表视图项。并不是说它无法完成,而只是因为这里有太多的层次。希望您能理解这段代码中的工作和努力,我希望这有助于解决您的问题。所以请尽情享受代码.. :)

1)在这种情况下有2个适配器。    首先是ListView    ViewPager的第二个

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

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

4)然后使用最终适配器给ListView充气并设置适配器...:D

以下是代码的执行方式:我将逐步完成

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

 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;
        }
}

步骤2:制作视图寻呼机适配器并对其进行充气将是模型类项目。这是基本视图寻呼机适配器!!

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);
    }

}

第3步:为ListView制作适配器

注意:这是我使用上一个适配器的地方,在这个适配器中我使用视图寻呼机作为列表项。

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;
    }

}

第4步:我将此最后一个适配器(&#34; ListViewPagerAdapter&#34;)设置为我的列表视图。

注意:这里我在我的一个片段中使用此适配器。您可以在普通的活动类上使用它,它也可以使用。

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);

    }

}

最后,此代码的布局代码段很少。

首先:列表视图本身:

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

第二: ViagerLayoutItem(行项目):

<?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>

最后:列表视图项目的抽屉列表项目:

<?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>

工作形象:

Images http://imageshack.com/a/img855/109/5w7e.png Images http://imageshack.com/a/img849/860/8j5t.png

如果对此代码存在任何疑问,请与我们联系。我很乐意回答。

希望你喜欢它,我希望你能尽力实现这个......我在这段代码上花了几分钟。希望这能帮助每个人......祝你好运.. :)

答案 1 :(得分:-1)

有一个示例github存储库,我发现在尝试与此类似的东西时非常有用。它非常有用。您可以使用此link

进行构建

在示例中,

您将看到viewpager被添加为列表元素。滚动侦听器实现使listview可滚动,否则不向下滚动