Как установить заполнитель TextView во фрагменте нижнего листа из адаптера
У меня есть такой класс 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();
Думаю, теперь у всех есть базовое представление о том, как работает моя логика кода.
Я пытаюсь достичь;
- Я хочу установить для редактирования текста нижнего листа имя кошелька, для которого пользователь нажимает параметр переименования
Но я не вижу реального способа сделать это через адаптер, так как на самом деле это не часть представления адаптера.
Кто-нибудь знает, как это сделать?
NB: в держателе вида при привязке для моего адаптера я получаю такое имя кошелька
holder.walletname.setText(userWalletList.get(position).getWalletName());
1 ответ
Решение
Сделайте это, если вы хотите передавать данные через пакет, тогда
В адаптере:
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()
);
}
Удалите код, связанный с пакетом и RenameWalletDialog, из onBindViewHolder.