我的活动fragment1和fragment2中有两个片段,我想当用户点击fragment2的后退按钮时,它应该将用户导航到fragement1
我的活动xml代码是:我在xml中设置片段
<?xml version="1.0" encoding="utf-8"?>
<android.support.v4.widget.DrawerLayout
xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:tools="http://schemas.android.com/tools"
android:id="@+id/drawer_layout"
android:layout_width="match_parent"
android:layout_height="match_parent"
tools:context=".Routeplan" >
<FrameLayout
android:id="@+id/content_frame_polymer"
android:layout_width="wrap_content"
android:layout_height="wrap_content" >
<viewpager.helper.JazzyViewPager
xmlns:android="http://schemas.android.com/apk/res/android"
android:id="@+id/pager"
android:layout_width="fill_parent"
android:layout_height="fill_parent"
/>
</FrameLayout>
</android.support.v4.widget.DrawerLayout>
我的活动代码:
public class MainActivity extends FragmentActivity {
@Override
protected void onCreate(Bundle arg0) {
super.onCreate(arg0);
setContentView(R.layout.packing_activity);
mPager = (JazzyViewPager)findViewById(R.id.pager);
PagerAdapter padapter = new PagerAdapter(getSupportFragmentManager(),NUM_PAGES,mPager);
mPager.setAdapter(padapter);
mPager.setPageMargin(30);
}
}
PagerAdapter代码:
public class PagerAdapter extends FragmentPagerAdapter {
int NUM_PAGES;
JazzyViewPager mPager;
public PagerAdapter(FragmentManager fm, int numPages, JazzyViewPager mPager) {
super(fm);
this.NUM_PAGES=numPages;
this.mPager=mPager;
// TODO Auto-generated constructor stub
}
@Override
public Object instantiateItem(ViewGroup container, int position) {
Object obj = super.instantiateItem(container, position);
mPager.setObjectForPosition(obj, position);
return obj;
}
@Override
public Fragment getItem(int arg0) {
// TODO Auto-generated method stub
switch (arg0) {
case 0:
return new Fragmentone();
case 1:
return new Fragmenttwo();
default:
break;
}
return null;
}
@Override
public int getCount() {
// TODO Auto-generated method stub
return NUM_PAGES;
}
}
Fragmentone代码:
public class FragmentOne extends Fragment {
private ViewGroup rootView1;
public View onCreateView(LayoutInflater inflater, ViewGroup container,
Bundle savedInstanceState) {
return rootView1 = (ViewGroup) inflater
.inflate(R.layout.about_rohtak, container, false);
}
}
Fragmenttwo代码:
public class FragmentTwo extends Fragment {
private ViewGroup rootView1;
public View onCreateView(LayoutInflater inflater, ViewGroup container,
Bundle savedInstanceState) {
return rootView1 = (ViewGroup) inflater
.inflate(R.layout.about_rohtak, container, false);
}
}
答案 0 :(得分:0)
基本上,您必须在Activity上覆盖onBackPressed
方法并将处理逻辑传递给Fragment。在Fragment中,您需要监听Activity中发生的事件。有一些选项如何实现这些东西,但我更愿意通过接口进行通信,如果可能的话。这可以具体实施:
public MyActivity extends AppCompatActivity {
private BackButtonListener backButtonListener;
public interface BackButtonListener {
void onBackButtonClicked();
}
public void setBackButtonListener(BackButtonListener backButtonListener) {
this.backButtonListener = backButtonListener;
}
public void onBackPressed() {
if (null != backButtonListener) {
backButtonListener.onBackButtonClicked();
} else {
super.onBackPressed();
}
}
}
public MyFragment extends Fragment implements BackButtonListener {
private ViewPager viewPager;
public void onAttach(Activity activity) {
super.onAttach(activity);
if (activity instanceof MyActivity) {
((MyActivity) activity).setBackButtonListener(this);
}
}
public void onBackButtonClicked() {
if (0 != viewPager.getCurrentItem()) {
viewPager.setCurrentItem(viewPager.getCurrentItem() - 1);
}
}
}
已修改:请谨慎实施此操作,因为您更改了自然导航顺序。想想你如何处理后退按钮然后当前viewpager项是第一个元素(位置0)。您应该知道如何判断片段对象(BackButtonListener)是否能够处理它并将处理逻辑传递回调用者或执行其他操作。这取决于情况。不久,总是对按下后退按钮的应用导航做一些有意义的事情。