最近我遇到了viewpager,但它的一个主要缺点是我们不能在viewpager中设置多个视图,所以我计划在一个屏幕上设置三个布局来根据大小操纵它,但它得到了崩溃的IndexOutOfBound异常,所以我现在非常挣扎与此现在让我解释我的要求是我需要在每页三个视图,假设如果我的列表大小5我需要三个在第一页和两个在下一页我想要,现在让我张贴我到目前为止尝试过的东西
这是我正在使用的PagerAdapter:
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();
}
}但是我不能像我想要的那样做到这一点,提前谢谢!
发布于 2018-01-08 18:07:11
我不明白你的getCount()方法,你有没有试过调试,看看它会返回什么?您也可以尝试下面这样的方法
@Override
public int getCount() {
return (int) Math.ceil(mSummarymodelist.size() / 3.f);
}https://stackoverflow.com/questions/48147651
复制相似问题