Проблема с изменением текста кнопки из фрагмента диалога

Здесь есть небольшая проблема. Как у меня было Recyclerview в диалоговом фрагменте. т.е. имя банка в recyclerview. Когда мы выбираем один банк в recyclerview и после отклонения диалогового фрагмента, это имя должно отображаться на кнопке, то есть когда мы выбрали Union Bank из фрагмента диалога он должен появиться на кнопке.Проблема в том, что когда мы нажимаем на кнопку, ее текст меняется, а не во время отключения слушателя

вот код закрытия диалога:

 mRecyclerView.addOnItemTouchListener(new RecyclerTouchListener(getContext(), mRecyclerView, new ClickListener() {
        @Override
        public void onClick(View view, final int position) {
            Employee e = bank.get(position);
            Toast.makeText(getContext(), e.getBank_id() + "" + e.getBank_name(), Toast.LENGTH_SHORT).show();
            getDialog().setOnDismissListener(new DialogInterface.OnDismissListener() {
                @Override
                public void onDismiss(DialogInterface dialogInterface) {
                    Employee e = bank.get(position);
                    SharedPreferences sp = PreferenceManager.getDefaultSharedPreferences(getContext());
                    SharedPreferences.Editor edit = sp.edit();
                    edit.putString("bankname", e.getBank_name());
                    edit.commit();
                }
            });
            c.onItemSelect(e.getBank_name());
            onDismiss(getDialog());
        }

Вот событие onclick, в котором открывается диалоговое окно и где должно быть напечатано значение:

select_button.setOnClickListener(new View.OnClickListener() {
        @Override
        public void onClick(View view) {
            FragmentManager fm=getFragmentManager();
            DialogRecyclerview dr = new DialogRecyclerview(AccountManagement_banks.this,callback);
            dr.setRetainInstance(true);
            dr.show(getSupportFragmentManager(), "Dialog");
            SharedPreferences st = PreferenceManager.getDefaultSharedPreferences(AccountManagement_banks.this);
            String mode=st.getString("bankname","");
            select_button.setText(mode);
            Toast.makeText(getApplication(),mode,Toast.LENGTH_SHORT).show();
        }
    });

То же в:

@Override
public void onItemSelect(String text) {
    select_button.setText(text);
}

Здесь я создал новый интерфейс:

 public interface CallBack {
      void onItemSelect(String text);}

person Abhi    schedule 12.09.2016    source источник
comment
ваш список просматривается внутри вашего фрагмента или он находится в том же действии, где находится ваша кнопка?   -  person sushildlh    schedule 12.09.2016
comment
Передайте любой обработчик или пользовательский интерфейс прослушивателя при инициализации DialogRecyclerview.   -  person Pradeep Yaduvanshy    schedule 12.09.2016
comment
Можешь показать мне демо @pradeep, сэр?   -  person Abhi    schedule 12.09.2016
comment
@dipalishah, но clicklistener активен, а ondismisslistener находится в диалоговом фрагменте. Я хочу установить текст активности из диалогового фрагмента.   -  person Abhi    schedule 12.09.2016
comment
@sushildlh, когда нажимается кнопка выбора, открывается фрагмент диалога, и в нем отображается список банков, и когда мы выбираем банк, (кнопка выбора) должна быть заменена на (выбранный банк)   -  person Abhi    schedule 12.09.2016
comment
@Abhi Используйте OnActivityResult, чтобы установить текст кнопки.   -  person Dipali Shah    schedule 12.09.2016
comment
Можете ли вы уточнить немного больше. StartActivityForResult в диалоговом окне recyclerview и onactivityresult в Activity ??   -  person Abhi    schedule 12.09.2016
comment
@Abhi Проверьте это - stackoverflow.com/questions/15970196/   -  person Dipali Shah    schedule 12.09.2016
comment
Все еще не приходит @dipalishah, кнопка тоже не меняется..   -  person Abhi    schedule 12.09.2016


Ответы (1)


просто создайте обратный вызов и реализуйте его в своем основном классе (где вы хотите отобразить имя) и передайте экземпляр обратного вызова адаптеру. Теперь фрагмент диалога, теперь, когда вы выбираете любой элемент, просто вызовите функцию обратного вызова, которая переопределена в основном классе, и внутри этой функции просто измените текст вашей кнопки.

public interface CallBack {

void onItemSelect(String text);

}

реализовать это в своем основном классе, например

public class MainActivity extends Activity implements CallBack {
.
.
.
public void onItemSelect(String text){
  button.setText(text);
}
.
.
}

когда вы открываете фрагмент диалога из основного действия, просто передайте MainActivity.this в качестве аргумента в конструкторе диалога. И в вашем конструкторе класса Dialog напишите свой код следующим образом

private Callback callback;
public YourDialog(Context context, Callback callback){
this.callback = callback;
}

и когда вы выбираете элемент списка, просто позвоните

callback.onItemSelect(e.getBank_name());

Надеюсь, это поможет вам.

person Rahul Sharma    schedule 12.09.2016
comment
Я изменил свой ответ. - person Rahul Sharma; 12.09.2016
comment
Я отредактировал свой вопрос. Просто посмотрите его, как только я использовал то же самое, что вы сказали, но все же есть ошибка. - person Abhi; 12.09.2016
comment
в select_button.setOnClickListener вы отправляете обратный вызов, где вы его инициализировали? - person Rahul Sharma; 12.09.2016
comment
да, инициализация происходит из фрагмента диалога, и текст должен быть изменен select_button - person Abhi; 12.09.2016
comment
просто попробуйте отладить свой код в c.onItemSelect(e.getBank_name()); и сообщите мне значение c и e.getBank_name()< /b> в этот момент. - person Rahul Sharma; 12.09.2016
comment
значение c равно нулю - person Abhi; 12.09.2016
comment
поэтому значение не отображается. Вы выполнили те же шаги, что я написал выше? - person Rahul Sharma; 12.09.2016
comment
вы можете видеть в основной программе, которую я редактировал... я использовал именно то, что вы сказали - person Abhi; 12.09.2016
comment
в конструкторе диалогового окна вы инициализировали объект обратного вызова, как я сделал в YourDialog? - person Rahul Sharma; 12.09.2016
comment
public DialogRecyclerview (контекстный контекст, CallBack c) { this.context = context; это.с = с; } - person Abhi; 12.09.2016
comment
select_button находится в вашей MainActivity? - person Rahul Sharma; 12.09.2016
comment
Да, именно так и хочу изменить текст select_button - person Abhi; 12.09.2016
comment
Ok. В DialogRecyclerview dr = new DialogRecyclerview(AccountManagement_banks.this,callback); как вы получаете значение callback? - person Rahul Sharma; 12.09.2016
comment
Я думаю, что это ноль. Просто передайте AccountManagement_banks.this вместо **обратного вызова. - person Rahul Sharma; 12.09.2016
comment
например DialogRecyclerview dr = new DialogRecyclerview(AccountManagement_banks.this, AccountManagement_banks.this); - person Rahul Sharma; 12.09.2016
comment
его значение берется из c.onItemSelect(e.getBank_name()); разве это не - person Abhi; 12.09.2016
comment
нет. Вы делаете неправильно здесь. Просто прочитайте мои последние 2 комментария и сделайте то же самое. - person Rahul Sharma; 12.09.2016