Как установить заполнитель TextView во фрагменте нижнего листа из адаптера - PullRequest
1 голос
/ 13 апреля 2020

У меня есть класс BottomSheetDialogFragment, подобный этому

RenameWalletDialog

public class RenameWalletDialog extends com.google.android.material.bottomsheet.BottomSheetDialogFragment  {

    EditText editTextWalletName;

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

        editTextWalletName = (EditText) view.findViewById(R.id.custom_input_et);

        view.findViewById(R.id.btn_confirm).setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View view) {
                Toast.makeText(getContext(), "Confirm button clicked", Toast.LENGTH_SHORT).show();
            }
        });

        view.findViewById(R.id.btn_cancel).setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View view) {
                dismiss();
            }
        });

        view.findViewById(R.id.clear_field).setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View view) {
                editTextWalletName.getText().clear();
            }
        });

        return view;

    }
}

, и я создал функцию в своем классе адаптеров следующим образом

WalletAdapter

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

        dataObjectHolder.walletoptions.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {
//                Toast.makeText(v.getContext(), "Option Click " + dataObjectHolder.getAdapterPosition(), Toast.LENGTH_SHORT).show();
//                Log.d(TAG, "position = " + dataObjectHolder.getAdapterPosition());
                Context wrapper = new ContextThemeWrapper(mCtx, R.style.popupMenuStyle);
                final PopupMenu popup = new PopupMenu(wrapper, v, Gravity.END);
                popup.inflate(R.menu.poupup_menu);

                popup.show();

                popup.setOnMenuItemClickListener(new PopupMenu.OnMenuItemClickListener() {
                    @Override
                    public boolean onMenuItemClick(MenuItem item) {
                        switch (item.getItemId()) {
                            case R.id.one:
                                showFragmentRenameWallet();
                                break;
                            case R.id.two:
                                //Do operation if menu_item_two
                                Toast.makeText(mCtx,"You Clicked : " + item.getTitle(),Toast.LENGTH_SHORT).show();
                                break;
                        }
                        return false;
                    }
                });
            }
        });
        return dataObjectHolder;
    }


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

        DecimalFormat formatter = new DecimalFormat("#,###,###");
        Double doubleBalance = (double) userWalletList.get(position).getBalance();
        String numberFormatBalance = formatter.format(doubleBalance);
        holder.walletname.setText(userWalletList.get(position).getWalletName());
        holder.walletbalance.setText(String.valueOf( "₦ " +numberFormatBalance));
//        holder.walletid.setText(String.valueOf(userWalletList.get(position).getWalletid()));
        RenameWalletDialog renameWalletFragment = new RenameWalletDialog();
        renameWalletFragment.show(((FragmentActivity)mCtx).getSupportFragmentManager(), renameWalletFragment.getTag());
        Bundle bundle = new Bundle();
        String walletN = userWalletList.get(position).getWalletName();
        bundle.putString("walletname", walletN);
        renameWalletFragment.setArguments(bundle);

    }


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

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

    private void showFragmentRenameWallet(){
        RenameWalletDialog renameWalletFragment = new RenameWalletDialog();
        renameWalletFragment.show(((FragmentActivity)mCtx).getSupportFragmentManager(), renameWalletFragment.getTag());
    }

и используйте такую ​​функцию

showFragmentRenameWallet();

Я думаю, что теперь у всех есть базовое c представление о том, как работает мой код logi c

Я пытаюсь достичь;

  1. Я хочу установить для вида редактирования текста нижнего листа имя кошелька, по которому пользователь нажимает опцию переименования для

Но я не вижу никакого реального способа сделать это с помощью адаптера, так как это на самом деле не является частью представления адаптера

Кто-нибудь имеет какие-либо идеи о том, как это сделать?

Примечание: в держателе вида для моего адаптера, я получаю имя кошелька вот так

holder.walletname.setText(userWalletList.get(position).getWalletName());

1 Ответ

1 голос
/ 13 апреля 2020

Сделайте это, если хотите передать данные через пакет, затем

В адаптере:

Bundle bundle = new Bundle()
bundle.putString(SomeKey, value you want to send)
walletFragmentObject.setArguments(bundle)

Затем во фрагменте

String text = getArguments.getString(SomeKey)

Обновление:

Измените свой метод, как показано ниже:

private void showFragmentRenameWallet(ViewHolder dataObjectHolder) {
    RenameWalletDialog renameWalletFragment = new RenameWalletDialog();
    Bundle bundle = new Bundle();
    String walletN = userWalletList
        .get(dataObjectHolder.getAdapterPosition())
        .getWalletName();
    bundle.putString("walletname", walletN);
    renameWalletFragment.show(
        ((FragmentActivity) mCtx).getSupportFragmentManager(),
        renameWalletFragment.getTag()
    );
}

Удалите код, связанный с bundle и RenameWalletDialog, из onBindViewHolder.

...