2017-01-10 4 views
0

Я получаю некоторые данные из фрагмента обратно в деятельность, используя интерфейс, который определяет метод как:активность Государство при получении данных из фрагмента

@Override 
public void passDataToActivity(String someValue, RecentTransAdapter recentTransAdapter) { 
    dateSelected = someValue; 
    monthButton.setText(dateSelected); 
    mAdapter = recentTransAdapter; 
} 

В каком состоянии жизненного цикла активности, это данные, полученный в результате деятельности?

passDataToActivity() вызывается внутри фрагмента onCreateView().

Адаптер я получаю, я хочу использовать его внутри Переключается setOnCheckedChangeListener():

aSwitch.setOnCheckedChangeListener(new CompoundButton.OnCheckedChangeListener() { 
    @Override 
    public void onCheckedChanged(CompoundButton buttonView, boolean isChecked) { 

     Log.d("2^^list is ",String.valueOf(mAdapter.getItemCount())); 

     if (!isChecked) { 
      Log.d("notchecked","yo"); 
      mAdapter.getFilter().filter(""); 
     } else { 
      mAdapter.getFilter().filter("credit"); 
     } 
     recyclerView.setAdapter(mAdapter); 
    } 
}); 

В настоящее время этот слушатель код находится в данный вид деятельности onCreate(), но адаптер не то, что мне нужно, чтобы получить от фрагмента.

Итак, в каком состоянии этот слушатель должен быть определен для получения требуемого адаптера?

+1

Он вызывается, когда вы вызываете свой интерфейсName.passDataToActivity из вашего фрагмента – mariozawa

ответ

0

Определить интерфейс, как,

interface PassDataToActivity{ 
    void passDataToActivity(String someValue, RecentTransAdapter recentTransAdapter); 
} 

Реализовать это в вашей деятельности

public class ActivitySample extends Activity implements PassDataToActivity{ 

    @Override 
    protected void onCreate(Bundle savedInstanceState) { 
     FragmentDemo fragment = FragmentDemo.newInstance(); 
     fragment.setPassDataToActivityListener(this); 
    } 

    @Override 
    public void passDataToActivity(String someValue, RecentTransAdapter recentTransAdapter) { 
     //Write code here... 
     dateSelected = someValue; 
     monthButton.setText(dateSelected); 
     mAdapter = recentTransAdapter; 
    } 
} 

В вашем фрагменте вы должны определить метод для инициализации экземпляра интерфейса и получить функцию обратного вызова

public class FragmentDemo extends Fragment { 

    PassDataToActivity mPassDataToActivity; 

    public void setPassDataToActivityListener(PassDataToActivity passDataToActivity){ 
     mPassDataToActivity = passDataToActivity; 
    } 
} 

Теперь вы можете передать результат своей деятельности, вызвав метод

mPassDataToActivity.passDataToActivity(someValue,mAdapter); 

В вашей ситуации я думаю, вы должны пройти в конце onCheckedChanged() как,

aSwitch.setOnCheckedChangeListener(new CompoundButton.OnCheckedChangeListener() { 
    @Override 
    public void onCheckedChanged(CompoundButton buttonView, boolean isChecked) { 

     Log.d("2^^list is ",String.valueOf(mAdapter.getItemCount())); 

     if (!isChecked) { 
      Log.d("notchecked","yo"); 
      mAdapter.getFilter().filter(""); 
     } else { 
      mAdapter.getFilter().filter("credit"); 
     } 
     recyclerView.setAdapter(mAdapter); 
     mPassDataToActivity.passDataToActivity(someValue,mAdapter); 
    } 
}); 

Надеется, что это помогает.

0

Когда ваш Activity реализует обратный вызов слушатель, который будет вызываться с помощью Fragment (аналогично тому, что @Jaymin объяснил в своем ответе, ваша деятельность трактуются так же, как экземпляр объекта Java, реализующего интерфейс обратного вызова.

TL;. DR

Обратный вызов не привязан к Activity жизненного цикла Activity может быть на любом этапе его жизненного цикла и просто получить обратный вызов, как и любой другой объект Java.

Объяснение

Так состояние Activity жизненный цикл никоим образом не связаны с выполнением обратного вызова он предоставляет. Обратный вызов можно вызвать в любое время, и будет реализована реализация Activity.Если вы вызываете его от метода Fragment.onCreateView(), она будет называться перед onResume из Activity, как показано ниже

01-10 13:27:01.549 4847-4847/com.c.fragmentlifecycle D/MainActivity: onCreate: called 
01-10 13:27:01.678 4847-4847/com.c.fragmentlifecycle D/MainFragment: onCreateView: called 
01-10 13:27:01.681 4847-4847/com.c.fragmentlifecycle D/MainActivity: onCallback: called by fragment 
01-10 13:27:01.688 4847-4847/com.c.fragmentlifecycle D/MainActivity: onResume: called 
01-10 13:27:01.688 4847-4847/com.c.fragmentlifecycle D/MainFragment: onResume: called 

Если вызвать функцию обратного вызова из onResume() в Fragment, она будет называться после onResume из Activity как показано ниже

01-10 13:28:55.897 4847-4847/com.c.fragmentlifecycle D/MainActivity: onCreate: called 
01-10 13:28:55.926 4847-4847/com.c.fragmentlifecycle D/MainFragment: onCreateView: called 
01-10 13:28:55.929 4847-4847/com.c.fragmentlifecycle D/MainActivity: onResume: called 
01-10 13:28:55.929 4847-4847/com.c.fragmentlifecycle D/MainFragment: onResume: called 
01-10 13:28:55.929 4847-4847/com.c.fragmentlifecycle D/MainActivity: onCallback: called by fragment 

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

Смежные вопросы