我在ViewPager
中有3 Fragments
。我有不同的后退按钮功能,我想为每个Fragment
实施。目前,我在每个片段中创建了与我想要后退按钮相对应的方法。我实现了一个接口在我的活动有以下methiod:片段ViewPager中的后退按钮实现
@Override
public void onCameraBack(int i) {
currFrag = i;
}
这里的想法是,有三个片段,每个片段调用其onStart()
方法这个方法。片段0传递0,片段1传递1,片段2传递2.所以通过这种方式,保持活动知道哪个片段是可见的。现在我正试图获得对该片段的引用,以便能够调用我已经在其中实现的后退方法。我试着用这个:
@Override
public void onBackPressed() {
if (currFrag == 0) {
}
else if (currFrag == 1) {
FragmentBTesting fragmentBTesting= new FragmentBTesting();
fragmentBTesting.FragmentBBack();
}
}`
但这是行不通的。我不能使用findFragmentbyId
方法,因为我的片段在其XML中没有片段标签,它们填满了整个屏幕,并且使用linearLayouts
定义了它们的视图。我的问题是如何获得片段的实例,以便我可以调用它的FragmentBack()
方法。
这里是我的全部活动
public class FragmentActivityTesting extends FragmentActivity implements FragmentATesting.logoutListener,FragmentBTesting.onCameraBack {
ViewPager viewPager = null;
SessionManager session = new SessionManager(MyApp.getContext());
int currFrag;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_fragment_activity_testing);
viewPager = (ViewPager) findViewById(R.id.pic_pager);
setStatusBarColor();
FragmentManager fragmentManager = getSupportFragmentManager();
viewPager.setAdapter(new MyAdapter(fragmentManager));
viewPager.setCurrentItem(1);
IntentFilter intentFilter = new IntentFilter();
intentFilter.addAction("CLOSE_ALL");
BroadcastReceiver broadcastReceiver = new BroadcastReceiver() {
@Override
public void onReceive(Context context, Intent intent) {
finish();
}
};
registerReceiver(broadcastReceiver, intentFilter);
}
@TargetApi(21)
public void setStatusBarColor() {
Window window = this.getWindow();
// clear FLAG_TRANSLUCENT_STATUS flag:
window.clearFlags(WindowManager.LayoutParams.FLAG_TRANSLUCENT_STATUS);
// add FLAG_DRAWS_SYSTEM_BAR_BACKGROUNDS flag to the window
window.addFlags(WindowManager.LayoutParams.FLAG_DRAWS_SYSTEM_BAR_BACKGROUNDS);
if (Integer.valueOf(android.os.Build.VERSION.SDK) >= 21) {
window.setStatusBarColor(this.getResources().getColor(R.color.green));
}
}
@Override
public void logout() {
session.logOut();
Intent a = new Intent(this,MainActivity.class);
startActivity(a);
Intent intent = new Intent("CLOSE_ALL");
this.sendBroadcast(intent);
finish();
}
@Override
public void onBackPressed() {
if (currFrag == 0) {
}
else if (currFrag == 1) {
FragmentBTesting fragmentBTesting= new FragmentBTesting();
fragmentBTesting.FragmentBBack();
}
}
@Override
public void onCameraBack(int i) {
currFrag = i;
}
}
class MyAdapter extends FragmentStatePagerAdapter {
public MyAdapter(FragmentManager fm) {
super(fm);
}
@Override
public Fragment getItem(int position) {
Fragment fragment = null;
if (position ==0) {
fragment = new FragmentATesting();
}
else if (position == 1) {
fragment = new FragmentBTesting();
}
else if (position == 2) {
fragment = new FragmentCTesting();
}
return fragment;
}
@Override
public int getCount() {
return 3;
}
}
有两个问题,父母是指最外面的布局?我应该清除onDestroy(),onPause()和onDestroyView()方法中的侦听器吗? – Alk
而我的活动是为了实现ActivitywitHomeButton还是我的片段? – Alk
Activity实现ActivityWithHomeButton。如果你需要监听器,只要显示片段,我相信你会想在#onPause(https:// lh3)中清除它。googleusercontent.com/-ePcpvCCqKgY/UhODSSrFHoI/AAAAAAAAAoI/D-ARz8gpkUA/w506-h930/android_fragment_lifecycle_complete.png)。充分披露:我不是活动/片段生命周期的专家,但这是我所说的。 –