在 RecyclerView 适配器中调用片段并获取 id

Posted

技术标签:

【中文标题】在 RecyclerView 适配器中调用片段并获取 id【英文标题】:Calling a fragment and getting the id in the RecyclerView adapter 【发布时间】:2021-11-09 23:44:57 【问题描述】:

我有一个使用 RecyclerView 的列表,我想要的是当我单击列表项时,它会打开一个片段,我一直在搜索,我只找到了一个活动,但我只使用片段,如果我使用活动,它会随着我的操作栏消失,这一切都在片段中设置。

这是我的适配器类:

    public class CreditCardAdapter extends RecyclerView.Adapter<CreditCardHolder> 

    private final List<CreditCard> creditList;

    public CreditCardAdapter(List<CreditCard> creditList) 
        this.creditList = creditList;
    

    @NonNull
    @Override
    public CreditCardHolder onCreateViewHolder(@NonNull ViewGroup parent, int viewType) 
        View view = LayoutInflater.from(parent.getContext()).inflate(R.layout.credit_card_item, parent, false);
        return new CreditCardHolder(view);
    

    @Override
    public void onBindViewHolder(@NonNull CreditCardHolder holder, int position) 
        CreditCard credit = creditList.get(position);
        String flag = credit.getFlag();
        holder.flag.setText(flag);
        String owner = credit.getOwner();
        holder.owner.setText(owner);
        String valueLimit = String.format("%.2f", credit.getLimit());
        holder.limit.setText(valueLimit.replace(".", ","));
        holder.creditCardId = credit.getId();

        holder.itemView.setOnClickListener(new View.OnClickListener() 
            @Override
            public void onClick(View view) 
               //Method on click
            
        );
    


    @Override
    public int getItemCount() 
        return creditList.size();
    

我需要将信用卡 ID 发送到 Fragment,以调用控制器并从数据库中获取信息,我尝试了它的意图,但它只有在我使用 startActivity(intent) 调用活动时才有效。

所以这里是片段类:

public class InfoCreditCardFragment extends Fragment 

    public InfoCreditCardFragment() 
        // Required empty public constructor
    


        @Override
        public View onCreateView(LayoutInflater inflater, ViewGroup container,
                             Bundle savedInstanceState) 
        View view = inflater.inflate(R.layout.fragment_info_credit_card, container, false);


        String id; //Here I need the id from the Adapter

        TextView flagInfoTxt = view.findViewById(R.id.flagInfoTxt);
        TextView ownerInfoTxt = view.findViewById(R.id.ownerInfoTxt);

        CreditCard cc = CreditCardController.getWithId(id);
        flagInfoTxt.setText(cc.getFlag());
        ownerInfoTxt.setText(cc.getOwner());


        return view;
    

如果有人知道可以提供帮助,请,我很绝望。

【问题讨论】:

您可以使用FragmentManager 替换片段。您可以将您的 id 作为Bundle developer.android.com/guide/fragments/transactions#java 【参考方案1】:

所以,我设法使用这个去片段:

Bundle bundle = new Bundle();
bundle.putString("id", holder.creditCardId);

InfoCreditCardFragment fragment = new InfoCreditCardFragment();
AppCompatActivity activity = (AppCompatActivity) view.getContext();
activity.getSupportFragmentManager().beginTransaction().replace(R.id.fragmentContainer, fragment).addToBackStack(null).commit();

在片段中,我只得到带有“getArguments().getString("id");”的包

【讨论】:

没关系,我是敲键盘后才知道的哈哈哈哈,知道如何使用 Bundle。 您能否在您的回答中添加有关您的捆绑问题以及诊断和解决该问题的步骤的更多信息? 您的答案可以通过额外的支持信息得到改进。请edit 添加更多详细信息,例如引用或文档,以便其他人可以确认您的答案是正确的。你可以找到更多关于如何写好答案的信息in the help center。

以上是关于在 RecyclerView 适配器中调用片段并获取 id的主要内容,如果未能解决你的问题,请参考以下文章

如果在片段和活动中都定义了 onRequestPermissionsResult,则不会在片段中调用

片段中的recyclerview的“RecyclerView:没有附加适配器;跳过布局”[重复]

从RecyclerView适配器更新活动或片段的视图

E/RecyclerView:没有附加适配器;在片段内的recyclerview上跳过布局

带有 ListAdapter 的 RecyclerView

将对象列表从片段传递到 recyclerView 适配器