从ViewPager中清除View

时间:2015-01-27 20:03:06

标签: java android android-viewpager

所以我正在尝试为Android制作闪卡。

我决定将ViewPager与PageAdapter一起使用。

我有一个用于创建和存储视图的Question类,因此每个问题都有自己的视图。 (问题是闪卡)。 Flashcard的UI位于ViewFlipper

还有一个扩展Application的类。我将我的问题(抽认卡)存储在ArrayList中。

这是我的PageAdapter

class MyAdapter extends PagerAdapter {

    Context mContext;
    LearnHelper app;
    int lastremoved = -1;

    public MyAdapter(Context context)
    {
        mContext = context;
    }

    @Override
    public Object instantiateItem(ViewGroup collection, int i)
    {
        View view = app.getTmpQuestion(i).getViewingView(collection, mContext, i);
        if(collection.indexOfChild(view) == -1) {
            collection.addView(view);
        }
        return view;
    }

    @Override
    public void destroyItem(ViewGroup collection, int i, Object view)
    {
        app.getTmpQuestion(i).unbindListeners();
        collection.removeView((View) view);
    }

    @Override
    public boolean isViewFromObject(View view, Object object)
    {
        return view == object;
    }

    @Override
    public int getCount() {
        return app.getTmpQuestionCount();
    }

    public void setApp(LearnHelper receivedapp) {
        app = receivedapp;
    }

    @Override
    public int getItemPosition(Object object){
        View view = (View) object;
        if(lastremoved < 0) {return POSITION_UNCHANGED;}
        if(view.getId() >= lastremoved-1)
        {
            return POSITION_NONE;
        }
        else
        {
            return POSITION_UNCHANGED;
        }
    }

    public void setLastremoved(Integer i)
    {
        lastremoved = i;
    }

}

我的适配器和viewpager已设置

viewPager = (ViewPager) findViewById(R.id.pager);
adapter = new MyAdapter(this);
adapter.setApp(app);
viewPager.setAdapter(adapter);
viewPager.setPageTransformer(true, new DepthPageTransformer());
viewPager.setOnPageChangeListener(this);

两种方法,第一种标记删除的问题,第二种方法在滑动到下一个屏幕后删除它。

public void hideQuestionCard(Question question) {
    question.MarkForDeletion();
    adapter.setLastremoved(app.tmpquestions.indexOf(question));
    MoveNext();
}

public void onPageScrollStateChanged(int state) {
    if(state == ViewPager.SCROLL_STATE_IDLE) {
        int currentitem = viewPager.getCurrentItem();
        if(currentitem == 0) {return;}
        Question question = app.getTmpQuestion(currentitem - 1);
        if(question.IsMarkedForDeletion()) {
            app.removeTmpQuestion(question);
            adapter.notifyDataSetChanged();
        }
    }
}

他们工作......唯一的问题是,这种情况发生了 https://drive.google.com/file/d/0B3jgzARMNYmRSkVwNV81bEZRSnc/view?usp=sharing

如何才能使拆卡工作变得干净整洁?

0 个答案:

没有答案