Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/android/197.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 使用viewpager更改片段时,如何使图像保留在imageview中?_Java_Android - Fatal编程技术网

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

Java 使用viewpager更改片段时,如何使图像保留在imageview中?,java,android,Java,Android,我有一个活动,它使用viewpager管理4个页面。用户可以通过单击操作栏中的“下一页”和“上一页”按钮转到下一页或上一页。我在fragment4中有一个imageview。问题是,当我在fragment4中添加图像时,当我单击“上一步”按钮时,它会将我带到fragment3。之后,当我点击下一步按钮时,它会再次将我带到fragment4,图像仍然可用。但为什么当我点击后退和后退按钮,它会把我带到碎片2,然后我点击下一步和下一步按钮;在片段4中,图像不再可用?只要活动未被破坏,我如何使图像可用?

我有一个活动,它使用viewpager管理4个页面。用户可以通过单击操作栏中的“下一页”和“上一页”按钮转到下一页或上一页。我在fragment4中有一个imageview。问题是,当我在fragment4中添加图像时,当我单击“上一步”按钮时,它会将我带到fragment3。之后,当我点击下一步按钮时,它会再次将我带到fragment4,图像仍然可用。但为什么当我点击后退和后退按钮,它会把我带到碎片2,然后我点击下一步和下一步按钮;在片段4中,图像不再可用?只要活动未被破坏,我如何使图像可用?对不起,英文和描述都很差。我希望我不会把你搞糊涂,希望你能分享一些关于这方面的想法和解决方案。多谢各位

片段4 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"/>

您应该设置为
mviewpage.setOffscreenPageLimit(3)在您的viewpager中

片段视图将在滚动过远时被销毁,您必须将状态存储在自定义字段中,并在
onCreateView
中重新使用该值

如果您想了解它的具体工作方式,请将调试日志添加到
onCreateView
onDestroyView


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

谢谢你的解释。当我将屏幕外限制设置为3时,它就工作了。非常感谢。
    @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);
}