从ViewPager中替换或删除一个片段,从一个片段中删除。

问题描述 投票:2回答:1

我正在使用一个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?

谢谢你。

android android-fragments android-viewpager
1个回答
0
投票

你应该调用 getFragmentManager().beginTransaction().replace(int id, Fragment fr).commit();onViewCreated() 方法,而不是 onCreateView() 方法。

最新问题
© www.soinside.com 2019 - 2024. All rights reserved.