Android 在一次又一次刷卡后,如何使用“上一次”按钮管理刷卡后的订单?

Android 在一次又一次刷卡后,如何使用“上一次”按钮管理刷卡后的订单?,android,android-cardview,Android,Android Cardview,问题:如果用户单击“上一步”按钮,如“谷歌入门应用程序”,如何将所有以前刷卡的卡重新放入堆栈 解释: 假设我有10张卡片。001, 002...010. 现在我开始刷卡。我刷了001、002和003,所以我现在看到的是004。现在我点击了上一个按钮。所以它显示003,这是正确的。 之后可能会出现两个用例: 1:假设我单击了“上一步”按钮,所以它应该显示002,但它没有显示。 2:假设我单击了“下一步”按钮,那么它应该再次显示004,也显示了004,这是正确的,但是现在我再次单击了“上一步”按钮,

问题:如果用户单击“上一步”按钮,如“谷歌入门应用程序”,如何将所有以前刷卡的卡重新放入堆栈

解释:

假设我有10张卡片。001, 002...010. 现在我开始刷卡。我刷了001、002和003,所以我现在看到的是004。现在我点击了上一个按钮。所以它显示003,这是正确的。

之后可能会出现两个用例:

1:假设我单击了“上一步”按钮,所以它应该显示002,但它没有显示。

2:假设我单击了“下一步”按钮,那么它应该再次显示004,也显示了004,这是正确的,但是现在我再次单击了“上一步”按钮,现在它没有显示003

Google primer应用程序示例图像:

我在项目中尝试了此库类,因为我不想在项目中添加依赖项:

滑动堆栈适配器:

public class SwipeStackAdapter extends BaseAdapter {
    public static final String TAG = SwipeStackAdapter.class.getSimpleName();

    private List<String> mData;

    public SwipeStackAdapter(List<String> data) {
        this.mData = data;
    }

    @Override
    public int getCount() {
        return mData.size();
    }

    @Override
    public String getItem(int position) {
        return mData.get(position);
    }

    @Override
    public long getItemId(int position) {
        return position;
    }

    @Override
    public View getView(final int position, View convertView, ViewGroup parent) {
        convertView = LayoutInflater.from(parent.getContext()).inflate(R.layout.card, parent, false);
        TextView textViewCard = convertView.findViewById(R.id.textViewCard);
        textViewCard.setText(mData.get(position));

        return convertView;
    }

    private void showLog(String msg) {
        Log.d(TAG, msg);
    }
}
public类SwipeStackAdapter扩展了BaseAdapter{
公共静态最终字符串标记=SwipeStackAdapter.class.getSimpleName();
私有列表数据;
公共SwipeStackAdapter(列表数据){
this.mData=数据;
}
@凌驾
public int getCount(){
返回mData.size();
}
@凌驾
公共字符串getItem(int位置){
返回mData.get(位置);
}
@凌驾
公共长getItemId(int位置){
返回位置;
}
@凌驾
公共视图getView(最终整数位置、视图转换视图、视图组父视图){
convertView=LayoutInflater.from(parent.getContext()).flate(R.layout.card,parent,false);
TextView textViewCard=convertView.findViewById(R.id.textViewCard);
textViewCard.setText(mData.get(position));
返回视图;
}
私有void showLog(字符串msg){
Log.d(标签、消息);
}
}
我在SwipeStack.java中找到了这个方法:

private void addNextView() {
    if (mCurrentViewIndex < mAdapter.getCount()) {
        View bottomView = mAdapter.getView(mCurrentViewIndex, null, this);
        bottomView.setTag(R.id.new_view, true);

        if (!mDisableHwAcceleration) {
            bottomView.setLayerType(LAYER_TYPE_HARDWARE, null);
        }

        if (mViewRotation > 0) {
            bottomView.setRotation(mRandom.nextInt(mViewRotation) - (mViewRotation / 2));
        }

        int width = getWidth() - (getPaddingLeft() + getPaddingRight());
        int height = getHeight() - (getPaddingTop() + getPaddingBottom());

        LayoutParams params = bottomView.getLayoutParams();
        if (params == null) {
            params = new LayoutParams(
                    FrameLayout.LayoutParams.WRAP_CONTENT,
                    FrameLayout.LayoutParams.WRAP_CONTENT);
        }

        int measureSpecWidth = MeasureSpec.AT_MOST;
        int measureSpecHeight = MeasureSpec.AT_MOST;

        if (params.width == LayoutParams.MATCH_PARENT) {
            measureSpecWidth = MeasureSpec.EXACTLY;
        }

        if (params.height == LayoutParams.MATCH_PARENT) {
            measureSpecHeight = MeasureSpec.EXACTLY;
        }

        bottomView.measure(measureSpecWidth | width, measureSpecHeight | height);
        addViewInLayout(bottomView, 0, params, true);

        mCurrentViewIndex++;
    }
}
private void addNextView(){
if(mCurrentViewIndex0){
底视图设置旋转(mRandom.nextInt(mViewRotation)-(mViewRotation/2));
}
int width=getWidth()-(getPaddingLeft()+getPaddingRight());
int height=getHeight()-(getPaddingTop()+getPaddingBottom());
LayoutParams params=bottomView.getLayoutParams();
if(params==null){
参数=新布局参数(
FrameLayout.LayoutParams.WRAP_内容,
FrameLayout.LayoutParams.WRAP_内容);
}
int MEASURESPECT WITH=最多测量一次;
int MEASURESPECT HEIGHT=最多测量一次;
if(params.width==layoutparms.MATCH\u父项){
measureSpecWidth=MeasureSpec;
}
if(params.height==LayoutParams.MATCH_PARENT){
测量高度=精确测量高度;
}
底视图。测量(测量宽度|宽度,测量高度|高度);
addViewInLayout(底部视图,0,参数,真);
mCurrentViewIndex++;
}
}

编辑:谢谢你的特别帮助。谢谢。我非常感谢您的经验和才华。

//添加一个新变量以保存上次刷卡的位置

int lastSwipedPosition=0;
//主列表和临时列表

private ArrayList<String> mData =  new Arraylist();
private ArrayList<String> mTempData =  new Arraylist();
//回调方法

@Override
public void onViewSwipedToRight(int position) {
  lastSwipedPosition=position+1;
}
@Override
public void onViewSwipedToLeft(int position) {
 lastSwipedPosition=position+1;
}
/点击previous按钮&为了返回到previous,我们将从lastSwipedPosition中减去1以显示最后一张刷卡

lastSwipedPosition = lastSwipedPosition - 1;
        if (lastSwipedPosition >= 0) {
            mTempData.clear();//clear all data
            for (int i = lastSwipedPosition; i < mData.size(); i++) {
                mTempData.add(mData.get(i));
            }
            mSwipeStack.resetStack();
            if (lastSwipedPosition == 0){
                Toast.makeText(this, "hide back button", Toast.LENGTH_SHORT).show();
            }
        } else {
            lastSwipedPosition = 0;
        }
lastSwipedPosition=lastSwipedPosition-1;
如果(上次开关位置>=0){
mTempData.clear();//清除所有数据
对于(int i=lastSwipedPosition;i
您不能使用MainActivity中提供的
if(v.equals(mButtonLeft)){mSwipeStack.swipeTopViewToLeft();}或者if(v.equals(mButtonRight)){mSwipeStack.swipeTopViewToRight();}
。@VirRajpurohit首先,非常感谢您尝试参与并帮助我解决这个问题。所以你上面的解决方案我已经试过了。只需点击按钮移除左卡或右卡即可。这和我们用guesture刷卡是一样的。我希望它应该在当前运行的卡片堆栈中添加以前的所有卡片。@VirRajpurohit检查编辑的问题alsoSo current swipeTopViewToLeft(),swipeTopViewToRight(),这些方法做什么?@VirRajpurohit它们只是显示下一张卡片。但只是一种想象正在改变。就像右边的一样,从右边到左边,从左边到左边谢谢你,纳夫尼特!它非常有效,而且你是一个非常乐于助人的人。谢谢:)你也可以投票支持我的答案。它将帮助我是的,但我没有125个名声。阿查,告诉我,我已经在中间的晶圆厂重新设置。在那个位置上又出现了一些问题。发布一个新问题。好的,先生,随你的便
lastSwipedPosition = lastSwipedPosition - 1;
        if (lastSwipedPosition >= 0) {
            mTempData.clear();//clear all data
            for (int i = lastSwipedPosition; i < mData.size(); i++) {
                mTempData.add(mData.get(i));
            }
            mSwipeStack.resetStack();
            if (lastSwipedPosition == 0){
                Toast.makeText(this, "hide back button", Toast.LENGTH_SHORT).show();
            }
        } else {
            lastSwipedPosition = 0;
        }