在程序内部跳转一般使用Fragment而不是Activity,Activity是比较重量级的组件。
在MainActivity进行跳转,首先把PlaceHolderFragment添加到Activity中:
public class MainActivity extends AppCompatActivity {
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
if (savedInstanceState == null){
getSupportFragmentManager().beginTransaction().add(R.id.container,new PlaceholderFragment()).commit();
}
}
}
注意这里的container是MainActivity的id。
在PlaceHolderFragment中执行跳转:
public class PlaceholderFragment extends Fragment {
public PlaceholderFragment() {
}
@Nullable
@Override
public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) {
View rootView = inflater.inflate(R.layout.fragment_main, container, false);
rootView.findViewById(R.id.btnShowAnotherFragment).setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
getFragmentManager().beginTransaction()
.addToBackStack(null)
.replace(R.id.container,new AnotherFragment())
.commit();
}
});
return rootView;
}
}
这里的addToBackStack是添加到后退栈,不然会回不来,replace是一种跳转方式,还有其他样式。
在AnotherFragment中可以用代码实现回退:
public class AnotherFragment extends android.support.v4.app.Fragment {
@Nullable
@Override
public View onCreateView(LayoutInflater inflater, @Nullable ViewGroup container, Bundle savedInstanceState) {
View root = inflater.inflate(R.layout.fragment_another,container,false);
root.findViewById(R.id.btnBack).setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
getFragmentManager().popBackStack();
}
});
return root;
}
}