Android 在一次又一次刷卡后,如何使用“上一次”按钮管理刷卡后的订单?
问题:如果用户单击“上一步”按钮,如“谷歌入门应用程序”,如何将所有以前刷卡的卡重新放入堆栈 解释: 假设我有10张卡片。001, 002...010. 现在我开始刷卡。我刷了001、002和003,所以我现在看到的是004。现在我点击了上一个按钮。所以它显示003,这是正确的。 之后可能会出现两个用例: 1:假设我单击了“上一步”按钮,所以它应该显示002,但它没有显示。 2:假设我单击了“下一步”按钮,那么它应该再次显示004,也显示了004,这是正确的,但是现在我再次单击了“上一步”按钮,现在它没有显示003强> Google primer应用程序示例图像: 我在项目中尝试了此库类,因为我不想在项目中添加依赖项: 滑动堆栈适配器:Android 在一次又一次刷卡后,如何使用“上一次”按钮管理刷卡后的订单?,android,android-cardview,Android,Android Cardview,问题:如果用户单击“上一步”按钮,如“谷歌入门应用程序”,如何将所有以前刷卡的卡重新放入堆栈 解释: 假设我有10张卡片。001, 002...010. 现在我开始刷卡。我刷了001、002和003,所以我现在看到的是004。现在我点击了上一个按钮。所以它显示003,这是正确的。 之后可能会出现两个用例: 1:假设我单击了“上一步”按钮,所以它应该显示002,但它没有显示。 2:假设我单击了“下一步”按钮,那么它应该再次显示004,也显示了004,这是正确的,但是现在我再次单击了“上一步”按钮,
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;
}