[我如何在再次刷卡并再次刷卡后使用上一个按钮刷卡后管理订单? [未解决]

问题描述 投票:0回答:3

问题:如果用户单击Google入门应用程序之类的上一个按钮,如何重新获得所有以前的刷卡?

说明:

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

此后可能会发生两个用例:

1:假设我单击了上一个按钮,因此它应该显示002,但未显示。

2:假设我单击了下一个按钮,因此它应该再次显示004,这也显示并且正确,但是现在我又单击了上一个按钮,但这次却不显示003!

Google入门读物示例图片:enter image description here

我在项目中尝试了这个库类,因为我不想在项目中添加依赖项:https://github.com/flschweiger/SwipeStack

滑动堆栈适配器:

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);
    }
}

我在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++;
        }
    }

添加了DisplayCardActivity:这是显示卡片的主页:

import android.app.ProgressDialog;
import android.os.Bundle;
import android.util.Log;
import android.view.View;
import android.widget.ImageButton;
import android.widget.TextView;
import android.widget.Toast;

import androidx.appcompat.app.AppCompatActivity;

import com.google.android.material.floatingactionbutton.FloatingActionButton;
import com.jimmytrivedi.getbasisdemo.Adapter.SwipeStackAdapter;
import com.jimmytrivedi.getbasisdemo.Class.FetchDataFromUriAsyncTask;
import com.jimmytrivedi.getbasisdemo.Class.SwipeStack;
import com.jimmytrivedi.getbasisdemo.Listener.JSONDataListener;
import com.jimmytrivedi.getbasisdemo.R;

import java.util.ArrayList;

import butterknife.BindView;
import butterknife.ButterKnife;

public class DisplayCardActivity extends AppCompatActivity implements SwipeStack.SwipeStackListener, View.OnClickListener, JSONDataListener {
    public static final String TAG = DisplayCardActivity.class.getSimpleName();

    @BindView(R.id.previous)
    ImageButton mPrevious;
    @BindView(R.id.next)
    ImageButton mNext;
    @BindView(R.id.swipe_stack)
    SwipeStack mSwipeStack;
    @BindView(R.id.fab)
    FloatingActionButton mFAB;
    @BindView(R.id.card_progress)
    TextView cardProgress;

    private FetchDataFromUriAsyncTask dataFromUriAsyncTask;
    private SwipeStackAdapter mAdapter;
    private ProgressDialog progressDialog;
    private ArrayList<String> mData;
    private ArrayList<String> mTempData = new ArrayList();
    private int mCurrentCardPosition = 1, lastSwipedPosition = -1;

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_display_card);
        init();
    }

    private void init() {
        ButterKnife.bind(this);
        setClickListener();
        dataFromUriAsyncTask = new FetchDataFromUriAsyncTask(this, this);
        dataFromUriAsyncTask.setJSONDataListener(this);
        progressDialog = new ProgressDialog(this);
        loadDataFromUrl();
    }

    private void setClickListener() {
        mPrevious.setOnClickListener(this);
        mNext.setOnClickListener(this);
        mFAB.setOnClickListener(this);
    }

    private void loadDataFromUrl() {
        //Showing progress dialog
        progressDialog.setMessage("Fetching Data from...");
        progressDialog.setCancelable(false);
        progressDialog.show();
        dataFromUriAsyncTask.execute();
    }

    @Override
    public void onClick(View v) {
        switch (v.getId()) {
            case R.id.previous:
            //lastSwipedPosition=lastSwipedPosition-1;
                showLog("lastSwipedPosition: " + lastSwipedPosition);
                if (lastSwipedPosition != -1) {
                    mTempData.clear();//clear all data
                    for (int i = lastSwipedPosition; i < mData.size(); i++) {
                        mTempData.add(mData.get(i));
                    }
                    mSwipeStack.resetStack();
            //        mSwipeStack.setCurrentViewIndex(lastSwipedPosition+3);
                } else {
                    showToast("hide", Toast.LENGTH_SHORT);
                }
                break;

            case R.id.next:
                mSwipeStack.swipeTopViewToRight();
                break;

            case R.id.fab:
                mSwipeStack.resetStack();
                if (mData != null)
                    cardProgress.setText("1 Out of " + mData.size());
                break;
        }
    }

    @Override
    public void onViewSwipedToLeft(int position) {
        mCurrentCardPosition = position + 2;
        setCurrentCardPosition(mCurrentCardPosition);
        lastSwipedPosition = position;
    }

    @Override
    public void onViewSwipedToRight(int position) {
        mCurrentCardPosition = position + 2;
        setCurrentCardPosition(mCurrentCardPosition);
        lastSwipedPosition = position;
    }

    @Override
    public void onStackEmpty() {
        cardProgress.setText("No card in stack");
    }


    @Override
    public void onClickData(ArrayList<String> getData) {
        getData.clear();
        getData.add("001");
        getData.add("002");
        getData.add("003");
        getData.add("004");
        getData.add("005");
        getData.add("006");
        getData.add("007");
        getData.add("008");
        getData.add("009");
        getData.add("010");


        // Dismiss the progress dialog
        if (progressDialog.isShowing())
            progressDialog.dismiss();


        mData = new ArrayList<>(getData);
        mTempData.addAll(mData);
        setCurrentCardPosition(mCurrentCardPosition);
        mAdapter = new SwipeStackAdapter(mTempData);

        mSwipeStack.setAdapter(mAdapter);
        mSwipeStack.setListener(this);
    }

    @Override
    public void onJSONParsingError(String error) {
        if (progressDialog.isShowing())
            progressDialog.dismiss();

        showToast(getString(R.string.user_error), Toast.LENGTH_LONG);
    }

    private void showToast(String message, int length) {
        Toast.makeText(this, message, length).show();
    }

    private void showLog(String msg) {
        Log.d(TAG, msg);
    }

    private void setCurrentCardPosition(int currentPosition) {
        cardProgress.setText(currentPosition + " Out of " + mData.size());

    }
}
android android-cardview
3个回答
0
投票

您可以列出已刷过的左张卡片。当您想堆叠回去时,只需将这些卡添加到主列表中并通知适配器

// Make a list
 private ArrayList<String> mData =  new Arraylist();

// make a list
private ArrayList<String> mTempData =  new Arraylist();



@Override
public void onViewSwipedToRight(int position) {
   mTempData.add(mData.get(position));
}

@Override
public void onViewSwipedToLeft(int position) {
    mTempData.add(mData.get(position));
}

当用户按下上一个按钮时,将mTempData放入mData列表。通过

通知栈
 mSwipeStack.resetStack();

编辑

//添加新变量以保存上一个滑动位置

int lastSwipedPosition=0;

//现在填写临时表中的所有数据,并在适配器中使用临时表

mTempData.addAll(mData);

//更改回调方法

@Override
public void onViewSwipedToRight(int position) {
  lastSwipedPosition=position;
}

@Override
public void onViewSwipedToLeft(int position) {
    lastSwipedPosition=position;
}

//现在单击上一个或重置按钮,以及从上一个滑动位置到最大位置的循环开始

mTempData.clear();//clear all data
for(int i=lastSwipedPosition;i<mData.size()i++){
    mTempData.add(mData.get(i));
}

mSwipeStack.resetStack();

0
投票

//添加新变量以保存上一个滑动位置

int lastSwipedPosition=-1;

//主列表

private ArrayList<String> mData =  new Arraylist();

//临时列表

private ArrayList<String> mTempData =  new Arraylist();

//现在填写临时表中的所有数据,并在适配器中使用临时表

mTempData.addAll(mData);

//回调方法

@Override
 public void onViewSwipedToRight(int position) {
  lastSwipedPosition=position;
 }

@Override
public void onViewSwipedToLeft(int position) {
  lastSwipedPosition=position;
}

//单击上一个按钮并返回上一个,我们将从lastSwipedPosition中减去1以显示上一张已刷卡。

> Edited 
lastSwipedPosition=lastSwipedPosition-1;
if(lastSwipedPosition!=-1){
    mTempData.clear();//clear all data
    for(int i=lastSwipedPosition;i<mData.size()i++){
       mTempData.add(mData.get(i));
    }
mSwipeStack.resetStack();
}else{ hide previous button  }

0
投票

//添加新变量以保存上一个滑动位置

int lastSwipedPosition=0;

//主列表和临时列表

private ArrayList<String> mData =  new Arraylist();
private ArrayList<String> mTempData =  new Arraylist();

//现在将所有数据填写到临时列表中,并在适配器中使用temp`

`mTempData.addAll(mData);
 mAdapter = new SwipeStackAdapter(mTempData);
 mSwipeStack.setAdapter(mAdapter);

//回调方法

@Override
public void onViewSwipedToRight(int position) {
  lastSwipedPosition=position+1;
}
@Override
public void onViewSwipedToLeft(int position) {
 lastSwipedPosition=position+1;
}

//单击上一个按钮,并返回上一个,我们将从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;
        }
© www.soinside.com 2019 - 2024. All rights reserved.