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