0

目前,我的 android 应用程序中有一个自定义 PagerAdapter 类,它基本上为使用光标的每次滑动提供一个新的闪存卡。一开始它提供了一个自定义 XML,基本上会给出说明(向左滑动上一个,向右滑动下一个)。向右滑动后,它将移动到闪存卡上,并在人滑动时循环浏览它们。我想做的是两件事:

1)在 ViewPager 的末尾(在光标到达最后一个位置并且用户已经看到最后一张卡片之后)我想添加一个自定义 XML 视图,就像我在开始时所做的那样。

2)我想让 ViewPager 停在这个视图上,让它进一步向右滑动不会做任何事情。

目前 1) 非常重要,一直让我感到沮丧。2)我可以没有,但可以方便地知道以供将来参考。我在下面写出了我的代码,希望一些 Android/ViewPager/PagerAdapter 专家可以帮助我。谢谢你的帮助!

@Override
    public Object instantiateItem(View view, int position) {
        LinearLayout layout = null;
        int position2 = position;
        if(position == 0){
            layout = (LinearLayout) inflater.inflate(R.layout.activity_slide_info, null);
        }else{
            position2--;
            cursor.moveToPosition(position2);
            layout = (LinearLayout) inflater.inflate(R.layout.activity_card, null);

            TextView cardTitle = (TextView) layout.findViewById(R.id.pirate_card_title);
            TextView cardExample = (TextView) layout.findViewById(R.id.pirate_card_example);
            TextView cardDefinition = (TextView) layout.findViewById(R.id.pirate_card_definition);

            cardTitle.setText(cursor.getString(cursor.getColumnIndex(FlashCardTable.COLUMN_TITLE)));
            cardExample.setText(cursor.getString(cursor.getColumnIndex(FlashCardTable.COLUMN_SENTENCE)));
            cardDefinition.setText(cursor.getString(cursor.getColumnIndex(FlashCardTable.COLUMN_DEFINITION)));
        }
        ((ViewPager) view).addView(layout);
        return layout;
}
4

1 回答 1

0

ViewPager 有时可能有点挑剔。

处理第二个问题的方法更简单:你是在实现 getCount() 吗?这应该可以解决您的第二个问题 - 将长度设置为您拥有的卡片总数(当然是减一)。这应该使它不会超过卡片的总数 - 如果你把它留空,当你去最后一张卡片时它会崩溃(因为它试图加载下一张但什么也没找到)。

第一个问题有点复杂:当它到达最后一个位置时,如何让它运行代码?最好的方法是在实现 ViewPager 的任何地方实现 onPageChangeListener(可能是 onCreate())。这是一个例子:

mPageChangeListener = new OnPageChangeListener() {
 @Override
 public void onPageScrollStateChanged(int arg0) {
    // TODO Auto-generated method stub
 }

 @Override
 public void onPageScrolled(int arg0, float arg1, int arg2) {
    // TODO Auto-generated method stub
 }

 @Override
 public void onPageSelected(int pos) {
     if (pos == lastPage) {
         //display your XML or do anything else you want to do when done here
         }
  }

};
yourViewPager.setOnPageChangeListener(mPageChangeListener);

希望这可以解决您的其他问题!

于 2013-08-09T05:09:12.237 回答