我正在使用一个ViewPager来创建一个滑动视图效果。我想知道如何将当前的viewpager片段从 myFragmentClass 延伸的Fragment。我找了很多解决方案,但大多数都是关于实现一个用户定义的函数,该函数将使用 碎片管理器 的类中,延伸出 FragmentPagerAdapter 来替换或删除当前设置的片段。如果你是在ViewPager被初始化的同一个活动中的某个UI元素上做的,那就很简单。我想让ViewPager中的第一个片段在响应第一个片段的动作时被替换成另一个片段(比如按下了一个按钮或什么)。
这是我的MainActivity,我在这里初始化和扩展FragmentPagerAdapter。
public class MainActivity extends FragmentActivity {
private ViewPager mViewPager;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
mViewPager = (ViewPager) findViewById(R.id.pager);
mViewPager.setAdapter(new FragmentAdapter(getSupportFragmentManager()));
mViewPager.setOnPageChangeListener(new ViewPager.OnPageChangeListener() {
@Override
public void onPageScrolled(int position, float positionOffset, int positionOffsetPixels) {
}
@Override
public void onPageSelected(int position) {
}
@Override
public void onPageScrollStateChanged(int state) {
}
});
}
}
class FragmentAdapter extends FragmentPagerAdapter{
public FragmentAdapter(FragmentManager fm) {
super(fm);
}
@Override
public Fragment getItem(int position) {
Fragment frag = null;
if(position == 0){
frag = new MainScreenFragment();
}
return frag;
}
@Override
public int getCount() {
return 1;
}
}
这是我的firstFragment类,扩展了Fragment。
public class MainScreenFragment extends Fragment implements View.OnClickListener {
private static int IMAGE_PIC = 22;
static int CAMERA_REQUEST = 123;
TextView mainTextv;
LinearLayout llContainer;
Activity activity;
Context context;
ImageView camera, gallery,picture,mainLogo;
public MainScreenFragment(){
//EMPTY CONSTRUCTOR
}
@Override
public View onCreateView(LayoutInflater inflater, ViewGroup container,
Bundle savedInstanceState) {
// Inflate the layout for this fragment
View v = inflater.inflate(R.layout.mainscreen_fragment, container, false);
//DoSOMETHING WITH MAIN TEXT HEADING
camera = (ImageView)v.findViewById(R.id.cameraCapture);
camera.setOnClickListener(this);
mainLogo= (ImageView)v.findViewById(R.id.mainImage);
mainLogo.setOnClickListener(this);
gallery = (ImageView)v.findViewById(R.id.galleryCapture);
gallery.setOnClickListener(this);
picture = (ImageView) v.findViewById(R.id.capturedImageView);
llContainer = (LinearLayout) v.findViewById(R.id.llSelector);
return v;
}
@Override
public void onClick(View v) {
switch(v.getId()){
case R.id.cameraCapture:
Intent cameraIntent = new Intent(android.provider.MediaStore.ACTION_IMAGE_CAPTURE);
startActivityForResult(cameraIntent, CAMERA_REQUEST);
break;
case R.id.galleryCapture:
Intent galleryIntent = new Intent(Intent.ACTION_PICK, MediaStore.Images.Media.EXTERNAL_CONTENT_URI);
startActivityForResult(galleryIntent, IMAGE_PIC);
break;
case R.id.mainImage:
DisplayMetrics dm = new DisplayMetrics();
getActivity().getWindowManager().getDefaultDisplay().getMetrics(dm);
final Dialog d = new Dialog(getActivity());
d.requestWindowFeature(Window.FEATURE_NO_TITLE);
d.setContentView(R.layout.dialog_picture);
d.getWindow().setLayout(dm.widthPixels - 100, dm.heightPixels - 100);
final ImageView im = (ImageView) d.findViewById(R.id.imageSelected);
Button btnSub = (Button) d.findViewById(R.id.submitBtn);
Button btnCancel = (Button) d.findViewById(R.id.btnCancel);
btnSub.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
//THIS IS THE POINT WHERE I WANT TO REPLACE THE CURRENT FRAGEMENT WITH ANOTHER ONE.
}
});
btnCancel.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
im.setVisibility(View.GONE);
d.dismiss();
}
});
im.setImageBitmap(BitmapFactory.decodeResource(getActivity().getResources(),R.drawable.testing_image_eye));
d.show();
break;
}
}
@Override
public void onActivityResult(int requestCode, int resultCode, Intent data) {
super.onActivityResult(requestCode, resultCode, data);
if(resultCode == Activity.RESULT_OK){
if(requestCode == CAMERA_REQUEST){
Bundle extras = data.getExtras();
try{
picture.setVisibility(View.VISIBLE);
picture.setImageBitmap((Bitmap)extras.get("data"));
}
catch(Exception e ){e.printStackTrace();}
}else if(requestCode == IMAGE_PIC){
Toast.makeText(getActivity(),"Image picked",Toast.LENGTH_SHORT).show();
try {
Uri selectedImage = data.getData();
String[] filePathColumn = {MediaStore.Images.Media.DATA};
Cursor cursor = getActivity().getContentResolver().query(selectedImage, filePathColumn, null, null, null);
cursor.moveToFirst();
int columnIndex = cursor.getColumnIndex(filePathColumn[0]);
String imgDecodeableString = cursor.getString(columnIndex);
cursor.close();
picture.setVisibility(View.VISIBLE);
picture.setImageBitmap(BitmapFactory.decodeFile(imgDecodeableString));
}catch(Exception e ) {
e.printStackTrace();
Toast.makeText(getActivity(),"Something went wrong! Debug!",Toast.LENGTH_SHORT).show();
}
}
}
}
}
有什么办法能把当前的Fragment替换成firstFragmentClass中的另一个Fragment?
谢谢你。
你应该调用 getFragmentManager().beginTransaction().replace(int id, Fragment fr).commit();
在 onViewCreated()
方法,而不是 onCreateView()
方法。