如何将数据从片段传递到适配器

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

让我快速解释一下我的代码结构,我有一个带有动态片段的动态标签布局。这些选项卡是从json响应中获取的,每个选项卡都有一个动态片段,其中还包含一个从json响应填充的回收者视图。

我正在尝试将所选标签的ID传递给回收者视图的适配器

1。 TransactionsFragment(创建选项卡布局的位置)

 for(int i=0;i<array.length();i++) {

                                //getting wallet object from json array
                                JSONObject userWallets=array.getJSONObject(i);

                                tab.addTab(tab.newTab().setText(userWallets.getString("wallet_name")));
                                walletID.add(userWallets.getInt("id"));
                            }

                            TransactionsPagerAdapter adapter = new TransactionsPagerAdapter
                                    (getChildFragmentManager(), tab.getTabCount(), walletID); //the data i need to pass is the walletID
                            viewPager.setAdapter(adapter);
                            viewPager.addOnPageChangeListener(new TabLayout.TabLayoutOnPageChangeListener(tab));
                            adapter.notifyDataSetChanged();

2。 TransactionsPagerAdapter(适配器控制选项卡)

public class TransactionsPagerAdapter extends FragmentStatePagerAdapter {
    int mNumOfTabs;
    ArrayList<Integer> walletID;

    public TransactionsPagerAdapter(FragmentManager fm, int NumOfTabs, ArrayList<Integer> walletID) {
        super(fm, BEHAVIOR_RESUME_ONLY_CURRENT_FRAGMENT);
        this.mNumOfTabs = NumOfTabs;
        this.walletID = walletID;
    }

    @Override
    public Fragment getItem(int position) {


        new DynamicFragment();
        return DynamicFragment.newInstance(walletID.get(position)); // the dynamic fragment controlling the recycler view

    }

    @Override
    public int getCount() {
        return mNumOfTabs;
    }
    }

3。 DynamicFragment(在每个选项卡中填充了回收站视图的位置)

for(int i=0;i<array.length();i++) {

                                //getting wallet object from json array
                                JSONObject userTransactions=array.getJSONObject(i);

                                //adding the wallet to wallet list
                                userTransactionList.add(new Transaction(
                                        userTransactions.getInt("id"),
                                        userTransactions.getInt("wallet_id"),
                                        userTransactions.getDouble("fee"),
                                        userTransactions.getDouble("amount"),
                                        userTransactions.getDouble("from"),
                                        userTransactions.getDouble("to"),
                                        userTransactions.getString("destination_address"),
                                        userTransactions.getString("type"),
                                        userTransactions.getString("created_at")
                                ));
                            }

                            //creating adapter object and setting it to recyclerview
                            TransactionsAdapter adapter = new TransactionsAdapter(getActivity(),childFragmentManager, userTransactionList);
                            mRecyclerView.setAdapter(adapter);
                            swipeRefreshLayout.setRefreshing(false);
                            // stop animating Shimmer and hide the layout
                            mShimmerViewContainer.stopShimmerAnimation();
                            mShimmerViewContainer.setVisibility(View.GONE);
//                            progressDialog.dismiss();
                            adapter.notifyDataSetChanged();

4。 TransactionsAdapter(控制回收者视图的适配器)

public class TransactionsAdapter extends RecyclerView.Adapter<TransactionsAdapter.DataObjectHolder> {

    private static String TAG = TransactionsAdapter.class.getSimpleName();

    private Context mCtx;
    private FragmentManager fragmentManager;

    private ArrayList<Transaction> userTransactionList;
    private static MyClickListener myClickListener;

    public TransactionsAdapter(Context mCtx, FragmentManager fragmentManager, ArrayList<Transaction> userTransactionList) {
        this.mCtx = mCtx;
        this.fragmentManager = fragmentManager;
        this.userTransactionList = userTransactionList;
    }

    public static class DataObjectHolder extends RecyclerView.ViewHolder {
        TextView transactionamount, transactionstatus, transactionid;
        ImageView transactionicon, pendingicon;

        public DataObjectHolder(View itemView) {
            super(itemView);
            transactionamount = (TextView) itemView.findViewById(R.id.amount);
            transactionstatus = (TextView) itemView.findViewById(R.id.status);
            transactionicon = (ImageView) itemView.findViewById(R.id.tx_icon);
            pendingicon = (ImageView) itemView.findViewById(R.id.img_status);
            transactionid = (TextView) itemView.findViewById(R.id.wallet_id);
        }

    }

        @Override
        public TransactionsAdapter.DataObjectHolder onCreateViewHolder(ViewGroup parent, int viewType) {
            View view = LayoutInflater.from(mCtx).inflate(R.layout.transaction_item, parent, false);
            final TransactionsAdapter.DataObjectHolder dataObjectHolder = new TransactionsAdapter.DataObjectHolder(view);
            return dataObjectHolder;
        }


        @Override
        public void onBindViewHolder(TransactionsAdapter.DataObjectHolder holder, final int position) {

            DecimalFormat formatter = new DecimalFormat("###,###,###,###,###.##");
            formatter.setDecimalSeparatorAlwaysShown(true);
            formatter.setMinimumFractionDigits(2);
            Double doubleBalance = userTransactionList.get(position).getTransactionAmount();
            String numberFormatBalance = formatter.format(doubleBalance);
            holder.transactionstatus.setText(userTransactionList.get(position).getTransactionType());
            holder.transactionamount.setText(String.valueOf("₦ " + numberFormatBalance));
            if ((userTransactionList.get(position).getTransactionType()).equals("send")) {
                holder.transactionicon.setImageResource(R.drawable.ic_communication_call_made);
            } else  {
                holder.transactionicon.setImageResource(R.drawable.ic_communication_call_received);
            }

        }


        @Override
        public int getItemCount() {
            return userTransactionList.size();
        }

        public interface MyClickListener {
            public void onItemClick(int position, View v);
        }
    }

我需要将walletID从1(TransactionsFragment)到4(TransactionsAdapter),是否可以,如果可以的话,我知道这实际上不能用bundle完成,因为我们没有创建意图。

java android android-fragments
1个回答
0
投票
  1. 确保您将walletId设置为ArgumentsDynamicFragment,>]
  2. DynamicFragment.newInstance(walletID.get(position))
    
  1. 修改TransactionsAdapter的构造函数,请遵循此
  2. private Integer walletId;
    
    public TransactionsAdapter(Context mCtx, FragmentManager fragmentManager, ArrayList<Transaction> userTransactionList, Integer walletId) {
            this.mCtx = mCtx;
            this.fragmentManager = fragmentManager;
            this.userTransactionList = userTransactionList;
            this.walletId = walletId;
        }
    
    
    
  1. DynamicFragment中,当您初始化TransactionsAdapter从片段的参数中获得walletId时>
    Integer walletId = getArguments().getInt("your_key") // your key when you newInstance and put to Bundle
    TransactionsAdapter adapter = new TransactionsAdapter(getActivity(),childFragmentManager, userTransactionList);
    
  2. 最后,您的适配器具有walletId的信息>

© www.soinside.com 2019 - 2024. All rights reserved.