使用viewpager更改片段时如何使图像保留在imageview中?

时间:2018-06-03 12:16:00

标签: java android

我有一个使用viewpager管理4个页面的活动。用户可以通过单击操作栏中的下一个和后退按钮转到下一页或上一页。我在fragment4中有一个imageview。问题是当我在fragment4中添加图像时,当我点击后退按钮时,它会将我带到fragment3。然后,当我点击下一个按钮时,它将再次将我带到fragment4,图像仍然可用。但是为什么当我点击后退和后退按钮它会带我到fragment2然后我点击下一步和下一个按钮;在fragment4中,图像不再可用?只要活动没有被破坏,我怎样才能使图像可用?对不起英语和描述不佳。我希望我不要混淆你,希望你能分享一些想法和解决方案。谢谢。

enter image description here

Fragment4 xml:

<ImageView
    android:id="@+id/imageView"
    android:layout_width="match_parent"
    android:layout_height="300dp"
    android:scaleType="fitXY"
    android:layout_centerInParent="true"
    android:visibility="visible"
    android:background="@drawable/ic_control_point_black_24dp"
    android:layout_marginBottom="10dp"/>

<TextView
    android:layout_width="match_parent"
    android:layout_height="wrap_content"
    android:text="@string/tap_add_replace_photo"
    android:textAlignment="center"/>

Fragment4 java:

    @Override
public View onCreateView(LayoutInflater inflater, ViewGroup container,
                         Bundle savedInstanceState) {
    // Inflate the layout for this fragment
    setHasOptionsMenu(true);

    View view = inflater.inflate(R.layout.fragment_create_activity_page_four, container, false);

    imageViewPhoto = view.findViewById(R.id.imageView);

    imageViewPhoto.setOnClickListener(new View.OnClickListener() {
        @Override
        public void onClick(View v) {
            choosePhoto();
        }
    });

    currentUser = FirebaseAuth.getInstance().getCurrentUser();
    activityId = ref.getId();

    return view;
}

public void choosePhoto(){
    try{

        Intent intent = new Intent(Intent.ACTION_GET_CONTENT);
        intent.setType("image/*");
        startActivityForResult(Intent.createChooser(intent, "Select Picture"), PICK_IMAGE_REQUEST);

    }catch (Exception e){
        Toast.makeText(getActivity(), e.getLocalizedMessage(), Toast.LENGTH_SHORT).show();
    }
}

@Override
public void onActivityResult(int requestCode, int resultCode, Intent data) {
    super.onActivityResult(requestCode, resultCode, data);

    if(requestCode == PICK_IMAGE_REQUEST && resultCode == Activity.RESULT_OK && data != null &&
            data.getData() != null){
        try
        {
            uri = data.getData();
            Bitmap bitmap = MediaStore.Images.Media.getBitmap(getActivity().getContentResolver(), uri);
            imageViewPhoto.setImageBitmap(bitmap);
        }
        catch (IOException e){
            e.printStackTrace();
        }
    }
}

@Override
public boolean onOptionsItemSelected(MenuItem item) {

    //hide soft keyboard
    InputMethodManager imm = (InputMethodManager) getActivity().getSystemService(Context.INPUT_METHOD_SERVICE);
    imm.hideSoftInputFromWindow(getView().getWindowToken(), 0);

    int id = item.getItemId();

    if (id == android.R.id.home) {
        ((ActivityCreateActivity)getActivity()).getViewPager().setCurrentItem(2);
        return true;
    }else if (id == R.id.action_publish) {
        getValue();
        return true;
    }

    return super.onOptionsItemSelected(item);
}

2 个答案:

答案 0 :(得分:0)

您应该在viewpager中设置mViewPager.setOffscreenPageLimit(3);

答案 1 :(得分:0)

片段视图在滚动太远时会被销毁,您必须将状态存储在自定义字段中,然后在onCreateView中重复使用该值。

如果您想查看其工作原理,请将调试日志添加到onCreateViewonDestroyView

但如果你没有太多页面,增加屏幕外限制可能就足够了。