我使用定义方法的接口将一些数据从片段返回到活动:
@Override
public void passDataToActivity(String someValue, RecentTransAdapter recentTransAdapter) {
dateSelected = someValue;
monthButton.setText(dateSelected);
mAdapter = recentTransAdapter;
}
活动的生命周期是什么状态,活动会收到这些数据吗?
passDataToActivity()
在片段onCreateView()
内被调用。
我得到的适配器,我想在Switch的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()
中,但是我不需要从片段获取适配器。
那么在哪个状态下需要定义这个监听器来获取所需的适配器?
答案 0 :(得分:0)
定义类似的界面,
1. item 1
2. item 2
```
Code block
```
{:start="3"}
3. item 3
在您的活动中实施此功能
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()
希望它对你有所帮助。
答案 1 :(得分:0)
当你的Activity
实现一个将被Fragment
调用的回调监听器时(类似于@Jaymin在他的回答中解释的那样,你的活动被视为实现回调的Java对象实例)界面。
<强> TL; DR 强>
回调与Activity
生命周期无关。 Activity
可以处于其生命周期的任何步骤,并且只会像任何其他Java对象一样接收回调。
<强>解释强>
因此Activity
生命周期状态与它提供的回调的实现无关。可以随时调用回调,并触发Activity
的实现。如果您使用Fragment.onCreateView()
方法调用它,则会在onResume
的{{1}}之前调用它,如下所示
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
的{{1}}拨打回叫,则会在onResume()
的{{1}}之后致电,如下所示
Fragment
希望这有帮助。