Как AppCompatActivity может взаимодействовать с FragmentActivity с помощью EventBus? - PullRequest
0 голосов
/ 02 февраля 2019

Вопрос , Как AppCompatActivity может взаимодействовать с FragmentActivity с помощью EventBus?

Findings , FragmentActivity может взаимодействовать с AppCompatActivity и вызывается метод onEvent, но еслимы переключаем канал связи, чтобы AppCompatActivity связывалось с FragmentActivity, метод onEvent никогда не вызывался.

public class MainActivity extends AppCompatActivity{
 private String data;
 @Override protected void onCreate{
  data = "private String data from MainActivity";
  EventBus.getDefault().postSticky(data);
 }
}

public class AccountFade extends FragmentActivity{
 private String mAccountFadeData;
 @Subscribe(sticky = true, threadMode = ThreadMode.MAIN)
 public void onEvent(String s){
  Toast.makeText(this, "private String mAccountFadeData from MainActivity", Toast.LENGTH_LONG).show();
  this.mAccountFadeData = s;
 }

 @Override protected void onCreate(Bundle savedInstanceState) {
  super.onCreate(savedInstanceState);
  EventBus.getDefault().register(this);
 }

 @Override public void onDestroy(){
  EventBus.getDefault().unregister(this);
  super.onDestroy();
 }
}

1 Ответ

0 голосов
/ 02 февраля 2019

Вы должны создать класс, содержащий одну переменную String, и запустить этот класс с помощью EventBus.

Итак, сначала создайте класс, подобный этому

public class DataChangeEvent {
    private String data;

    public DataChangeEvent(String data) {
        this.data = data;
    }

    public String getData() {
        return data;
    }

    public void setData(String data) {
        this.data = data;
    }
}

Теперь используйте это для своего события

Опубликовать в Activtiy:

 EventBus.getDefault().postSticky(new DataChangeEvent(data));

Получить во FragmentActivity:

 @Subscribe(sticky = true, threadMode = ThreadMode.MAIN)
 public void onEvent(DataChangeEvent event){
      Toast.makeText(this, "private String mAccountFadeData from MainActivity", Toast.LENGTH_LONG).show();
      this.mAccountFadeData = event.getData();
 }
...