如何在活动单击按钮时将数据从recyclerview卡传递到下一个活动

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

我有一个带有卡片和微调框的recyclerview,需要将微调框内选择的值发送给下一个活动以计算估计价格。我在活动中有一个不是recyclerview的按钮,它将带我到需要这些值的下一个活动。因此,当我单击此按钮时,我需要它来收集数据并将其发送到下一个活动,我该如何实现。

我附上一张照片。红色箭头(我在下一个活动中需要的数据),蓝色箭头(按下按钮将我带到下一个活动)

Screenshot of screen

FileAdapter.java

public class FileAdapter extends RecyclerView.Adapter<FileAdapter.FileViewHolder> {

    private ArrayList<FileItem> mFileList;
    private OnItemClickListener mListener;

    private static Context context;

    private static String[] orders;

    private static final String TAG = FileAdapter.class.getSimpleName();

    public FileAdapter(ArrayList<FileItem> fileList) {
        mFileList = fileList;
    }

    public interface OnItemClickListener {
        void onDeleteClick(int position);

        void onViewClick(int position);
    }

    public void setOnItemClickListener(OnItemClickListener listener) {
        mListener = listener;
    }

    public static class FileViewHolder extends RecyclerView.ViewHolder {

        public ImageView mImageView, mDeleteImage;
        public MaterialButton mviewPDFButton, addButton,minusButton;
        public MaterialTextView mfileNameTextView;

        private MaterialTextView mcopiesText;

        private Spinner printColorSpinner;

        private FileViewHolder(@NonNull View itemView, final OnItemClickListener listener) {
            super(itemView);

            addButton = itemView.findViewById(R.id.increaseButton);
            minusButton = itemView.findViewById(R.id.reduceButton);

            mcopiesText = itemView.findViewById(R.id.copiesNumberText);

            printColorSpinner = itemView.findViewById(R.id.printColorSpinner);

            printColorSpinner.setOnItemSelectedListener(new AdapterView.OnItemSelectedListener() {
                @Override
                public void onItemSelected(AdapterView<?> parent, View view, int
                        position, long id) {
                    // On selecting a spinner item
                    String item = parent.getItemAtPosition(position).toString();
                    Log.e(TAG,item);
                }
            }
        }

    @NonNull
    @Override
    public FileViewHolder onCreateViewHolder(@NonNull ViewGroup parent, int viewType) {
        View v = LayoutInflater.from(parent.getContext()).inflate(R.layout.file_items, parent, false);
        FileViewHolder fvh = new FileViewHolder(v, mListener);
        Log.i(TAG, "onCreateViewHolder Invoked");
        return fvh;
    }

    @Override
    public void onBindViewHolder(@NonNull FileViewHolder holder, int position) {
        long startTime = System.currentTimeMillis();

        FileItem currentItem = mFileList.get(position);

        holder.mImageView.setImageResource(currentItem.getImageResource());
        holder.mfileNameTextView.setText(currentItem.getFileNameText());
        holder.mcopiesText.setText(String.valueOf(mFileList.get(position).getCount()));

        holder.addButton.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {
                mFileList.get(position).setCount(mFileList.get(position).getCount()+1);
                holder.mcopiesText.setText(String.valueOf(mFileList.get(position).getCount()));
                Log.e(TAG, (String) holder.mcopiesText.getText());
                orders[6]=(String) holder.mcopiesText.getText();
            }
        });

        holder.minusButton.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {
                int count = Integer.parseInt((String) holder.mcopiesText.getText());
                if (count>=1) {
                    mFileList.get(position).setCount(mFileList.get(position).getCount()-1);
                    holder.mcopiesText.setText(String.valueOf(mFileList.get(position).getCount()));
                    Log.e(TAG, (String) holder.mcopiesText.getText());
                    orders[6]=(String) holder.mcopiesText.getText();
                }
            }
        });

        Log.e(TAG, (String) holder.mcopiesText.getText());
    }
}

QuickprintActivity.java

    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_quickprint);

        storage = FirebaseStorage.getInstance();

        fileChooser();

        createFileList();
        buildRecyclerView();

        findMerchantTextView = findViewById(R.id.button_find_merchant);

        findMerchantTextView.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {
                Intent i = new Intent(QuickprintActivity.this,FindMerchantsActivity.class);
                startActivity(i);
            }
        });
    }

    public void insertItem(int position, String fName) {
        mFileList.add(position, new FileItem(R.drawable.ic_account_circle_black_24dp, fName));
        mRecyclerView.scrollToPosition(0);
        mAdapter.notifyItemInserted(position);
    }

    public void removeItem(int position) {
        mFileList.remove(position);
        mAdapter.notifyItemRemoved(position);
    }

    private void createFileList() {
        mFileList = new ArrayList<>();
    }

    private void buildRecyclerView() {
        mRecyclerView = findViewById(R.id.recyclerView);
        mRecyclerView.setHasFixedSize(true);
        mlayoutManager = new LinearLayoutManager(this);
        mAdapter = new FileAdapter(mFileList);

        mRecyclerView.setLayoutManager(mlayoutManager);
        mRecyclerView.setAdapter(mAdapter);

        mAdapter.setOnItemClickListener(new FileAdapter.OnItemClickListener() {
            @Override
            public void onDeleteClick(int position) {
                removeItem(position);
                Log.e(TAG, "POSITION" + position);
            }

            @Override
            public void onViewClick(int position) {
                openPDF();
                Log.e(TAG, "CLICKED");
            }
        });

    }
android android-activity android-recyclerview recycler-adapter
1个回答
0
投票

使类FileItem实现Parcelable接口。然后使用putParcelableArrayListExtra将该项目列表放入意图中。例如:

i.putParcelableArrayListExtra("file_list", new ArrayList<>(mFileList));

然后在第二个活动中,从意图中检索列表:

getIntent().getParcelableArrayListExtra<FileItem>("file_list");
© www.soinside.com 2019 - 2024. All rights reserved.