首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何在viewpager中设置多个视图?

如何在viewpager中设置多个视图?
EN

Stack Overflow用户
提问于 2018-01-08 17:45:07
回答 1查看 73关注 0票数 0

最近我遇到了viewpager,但它的一个主要缺点是我们不能在viewpager中设置多个视图,所以我计划在一个屏幕上设置三个布局来根据大小操纵它,但它得到了崩溃的IndexOutOfBound异常,所以我现在非常挣扎与此现在让我解释我的要求是我需要在每页三个视图,假设如果我的列表大小5我需要三个在第一页和两个在下一页我想要,现在让我张贴我到目前为止尝试过的东西

这是我正在使用的PagerAdapter:

代码语言:javascript
复制
public class SummaryViewPagerAdapter extends PagerAdapter {

    private List<SummaryModel>mSummarymodelist;
    private Context context;
    private LayoutInflater inflater;


    public SummaryViewPagerAdapter(Context context, List<SummaryModel> summaryModels ) {
          this.mSummarymodelist=summaryModels;
          this.context=context;
      }



    @Override
    public int getCount() {
        int count=(mSummarymodelist.size()+3-1)/3;
        return count;
    }

    @Override
    public boolean isViewFromObject(View view, Object object) {
         return view == object;
    }
    private void populateTextView(TextView status_txt,TextView status_count,  String status, String color, RelativeLayout layout,String count) {

        status_txt.setText(status);
        status_count.setText(count);
        layout.setBackgroundColor(Color.parseColor(color));
    }

    @Override
    public Object instantiateItem(ViewGroup container, int position) {
        // TODO Auto-generated method stub
        inflater = (LayoutInflater) context
                .getSystemService(Context.LAYOUT_INFLATER_SERVICE);
        View itemView = inflater.inflate(R.layout.summary_viewholder,
                container, false);
        TextView status_txt= itemView.findViewById(R.id.txt_1);
        TextView count_txt=itemView.findViewById(R.id.count_1);
        RelativeLayout relativeLayout=itemView.findViewById(R.id.rl_1);
        position=position * 2;
        if (position <getRealCount()) {
            populateTextView(status_txt,count_txt,mSummarymodelist.get(position).getName(),mSummarymodelist.get(position).getColorCode(),relativeLayout, String.valueOf(mSummarymodelist.get(position).getCount()));
            status_txt.setVisibility(View.VISIBLE);
            count_txt.setVisibility(View.VISIBLE);
            relativeLayout.setVisibility(View.VISIBLE);

        }
        else if(position==getRealCount()) {
            populateTextView(status_txt,count_txt,mSummarymodelist.get(position-1).getName(),mSummarymodelist.get(position-1).getColorCode(),relativeLayout, String.valueOf(mSummarymodelist.get(position-1).getCount()));
            status_txt.setVisibility(View.VISIBLE);
            count_txt.setVisibility(View.VISIBLE);
            relativeLayout.setVisibility(View.VISIBLE);

        }
        else {
            status_txt.setVisibility(View.INVISIBLE);
            count_txt.setVisibility(View.INVISIBLE);
            relativeLayout.setVisibility(View.INVISIBLE);

        }
        position++;
        status_txt= itemView.findViewById(R.id.txt_2);
        count_txt=itemView.findViewById(R.id.count_2);
        relativeLayout=itemView.findViewById(R.id.rl_2);
        if (position < getRealCount()) {
            populateTextView(status_txt,count_txt, mSummarymodelist.get(position).getName(),mSummarymodelist.get(position).getColorCode(),relativeLayout, String.valueOf(mSummarymodelist.get(position).getCount()));
            status_txt.setVisibility(View.VISIBLE);
            count_txt.setVisibility(View.VISIBLE);
            relativeLayout.setVisibility(View.VISIBLE);
        }
        else if(position==getRealCount()) {
            populateTextView(status_txt,count_txt,mSummarymodelist.get(position-2).getName(),mSummarymodelist.get(position-2).getColorCode(),relativeLayout, String.valueOf(mSummarymodelist.get(position-2).getCount()));
            status_txt.setVisibility(View.VISIBLE);
            count_txt.setVisibility(View.VISIBLE);
            relativeLayout.setVisibility(View.VISIBLE);

        }
        else {
            status_txt.setVisibility(View.INVISIBLE);
            count_txt.setVisibility(View.INVISIBLE);
            relativeLayout.setVisibility(View.INVISIBLE);
        }
        position++;
        status_txt= itemView.findViewById(R.id.txt_3);
        count_txt=itemView.findViewById(R.id.count_3);
        relativeLayout=itemView.findViewById(R.id.rl_3);
        if (position <getRealCount()) {
            populateTextView(status_txt,count_txt, mSummarymodelist.get(position).getName(),mSummarymodelist.get(position).getColorCode(),relativeLayout, String.valueOf(mSummarymodelist.get(position).getCount()));
            status_txt.setVisibility(View.VISIBLE);
            count_txt.setVisibility(View.VISIBLE);
            relativeLayout.setVisibility(View.VISIBLE);
        }
        else if(position==getRealCount()) {
            populateTextView(status_txt,count_txt,mSummarymodelist.get(position-3).getName(),mSummarymodelist.get(position-3).getColorCode(),relativeLayout, String.valueOf(mSummarymodelist.get(position-3).getCount()));
            status_txt.setVisibility(View.VISIBLE);
            count_txt.setVisibility(View.VISIBLE);
            relativeLayout.setVisibility(View.VISIBLE);

        }
        else {
            status_txt.setVisibility(View.INVISIBLE);
            count_txt.setVisibility(View.INVISIBLE);
            relativeLayout.setVisibility(View.INVISIBLE);
        }

       container.addView(itemView);
        return itemView;
    }

    @Override
    public void destroyItem(ViewGroup container, int position, Object object) {
        container.removeView((LinearLayout) object);
    }
    private int getRealCount() {
        return mSummarymodelist.size();
    }

}

但是我不能像我想要的那样做到这一点,提前谢谢!

EN

回答 1

Stack Overflow用户

发布于 2018-01-08 18:07:11

我不明白你的getCount()方法,你有没有试过调试,看看它会返回什么?您也可以尝试下面这样的方法

代码语言:javascript
复制
@Override
public int getCount() {
    return (int) Math.ceil(mSummarymodelist.size() / 3.f);
}
票数 -1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/48147651

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档