Есть адаптер который генерирует и обрабатываете клики по елементам, из него вызывается при нажатии на картинку fragmentDialog в котором есть edittext. Мы вводим данные туда и нажимаем к примеру "готово" или "отмена" в диалоге - и нам нужно передать данные туда, откуда этот диалог был вызван. Помогите пожалуйста правильно получить данные. Код фрагмента:
public class DialogFragmentAddToLike extends DialogFragment
implements DialogInterface.OnClickListener{
public static String COMMENT = "Немає конментару";
public static int TYPE_RESULT = 0;
View view;
EditText etComment;
public interface OnButtonClick {
void getResultListener(String comment, int typeResult);
}
public OnButtonClick listener;
@Override
public Dialog onCreateDialog(Bundle savedInstanceState) {
LayoutInflater inflater = getActivity().getLayoutInflater();
view =
inflater.inflate(R.layout.comment_dialog_fragment_edit_text_layout, null);
etComment = view.findViewById(R.id.etCommentContact);
AlertDialog.Builder adb = new AlertDialog.Builder(getActivity())
.setTitle("Ваш коменр:")
.setPositiveButton(R.string.yes, this)
.setNegativeButton(R.string.no, this)
.setView(view);
return adb.create();
}
@Override
public void onClick(DialogInterface dialog, int which) {
switch (which){
case DialogInterface.BUTTON_POSITIVE:
if(!etComment.getText().toString().isEmpty()){
COMMENT = etComment.getText().toString();
}
TYPE_RESULT = 1;
//listener.getResultListener(COMMENT, 1);
Log.println(Log.INFO, "api", "dialog " + COMMENT);
break;
case DialogInterface.BUTTON_NEGATIVE:
TYPE_RESULT = 0;
//listener.getResultListener(COMMENT, 0);
break;
}
}
@Override
public void onAttach(Context context) {
super.onAttach(context);
listener.getResultListener(COMMENT, TYPE_RESULT);
try { listener = (OnButtonClick) getActivity(); }
catch (ClassCastException e) { throw new
ClassCastException(context.toString() + " must implement OnButtonClick"); }
}
}
Вызов диалога:
@Override
@SuppressLint("RecyclerView")
public void onBindViewHolder(@NonNull final ViewHolder holder, final int
position) {
String fullName = contactItemList.get(position).getLast_name() + " " +
contactItemList.get(position).getFirst_name();
holder.pib.setText(fullName);
holder.misce_rob.setText(contactItemList.get(position).getMisce_rob());
holder.addToLike.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
String s = context.getString(R.string.like);
if(holder.addToLike.getTag().equals(s)){
holder.addToLike.setImageResource(R.drawable.star_contact);
holder.addToLike.setTag(context.getString(R.string.like_1));
DialogFragmentAddToLike dialog = new
DialogFragmentAddToLike();
dialog.show(fragmentManager, "dialog add to like");
//getResultListener(DialogFragmentAddToLike.COMMENT,
//DialogFragmentAddToLike.TYPE_RESULT);
// ПОЛУЧИТЬ ДАННЫЕ ДИАЛОГА
Log.println(Log.INFO, "api", "holder " +comment);
//dialog.onClick();
// not comment ------------------ Log.println(Log.INFO,
"api", comment);
}
}
});
holder.openPDF.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
Toast.makeText(context, "open pdf: "+
contactItemList.get(position).getLink_pdf(),
Toast.LENGTH_SHORT).show();
}
});
if(TYPE_VIEW != 0){
holder.change.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
// change comment by id
}
});
}
}
Как после открытия диалога "ждать" пока он не закроется и тогда получить данные?
Попробуйте вместо возьни с интерфейсами при клике на айтем из адаптера передавать в диалог фрагмент new Concumer(). RxJava2.
вашДиалог.newInstance(objectId, new Consumer<String> (){
@Override
public void accept(String message) throws Exception {
doSomethingWithMessage(message);
}
})
а в диалоге когда реализуете RxTextView из RxBindings
subscription = RxTextView.textChanges(etCancelComment)
.filter(charSequence -> charSequence.length() < 256)
.subscribe(charSequence -> {
if (charSequence.toString().length() > 10) {
consumer.accept(charSequence)
} else {
Toast."Мало текста. Бла бла"
}
});
Из newInstance вытащите Consumera для вставки в RxTextView
Создайте интерфейс:
public interface CustomDialogInterface {
void okButtonClicked(String value);
}
DialogFragment:
public class MyAlert extends DialogFragment implements OnClickListener {
private EditText getEditText;
MainActivity callBackActivity;
CustomDialogInterface customDI;
public MyAlert(CustomDialogInterface customDI)
{
this.customDI = customDI;
}
@Override
public Dialog onCreateDialog(Bundle savedInstanceState) {
callBackActivity = new MainActivity();
getEditText = new EditText(getActivity());
getEditText.setInputType(InputType.TYPE_CLASS_TEXT);
AlertDialog.Builder builder = new AlertDialog.Builder(getActivity());
builder.setTitle("Get UserName :");
builder.setMessage("Enter Your Name :");
builder.setPositiveButton("Ok", this);
builder.setNegativeButton("Cancel", null);
builder.setView(getEditText);
return builder.create();
}
@Override
public void onClick(DialogInterface dialog, int which) {
String value = getEditText.getText().toString();
Log.d("Name : ", value);
dialog.dismiss();
customDI.okButtonClicked(value);
}
}
Вызов диалога:
public void showMyAlert(View view) {
MyAlert myAlert = new MyAlert(this);
myAlert.show(getFragmentManager(), "My New Alert");
}
Имплементируйте интерфейс CustomDialogInterface
в MainActivity
и переопределите метод okButtonClicked()
Айфон мало держит заряд, разбираемся с проблемой вместе с AppLab
Не получается реализовать переход из фрагмента в активити по кнопкеПерерыв весь интернет, решила попросить о помощи, т
как реализовать общение между двумя и больше компьютеров? Читал что нужно использовать сокеты, но возможно есть и другой вариант? Раньше...
Можете помочь написать метод Multiple который создает две матрицы и умножает их