簡體   English   中英

使用viewpager更改片段時,如何使圖像停留在imageview中?

[英]How to make image stays in imageview when fragment is changed using viewpager?

我有一個使用Viewpager管理4個頁面的活動。 用戶可以通過單擊操作欄中的下一個和上一個按鈕來轉到下一頁或上一頁。 我在fragment4中有一個imageview。 問題是,當我在fragment4中添加圖像時,當我單擊“后退”按鈕時,它將帶我進入fragment3。 之后,當我單擊下一步按鈕時,它將再次將我帶到fragment4,並且圖像仍然可用。 但是為什么當我單擊“后退”和“后退”按鈕時,它將帶我進入fragment2,然后單擊“下一步”和“下一個”按鈕; 在fragment4中,該圖像不再可用? 只要不破壞活動,我如何使圖像可用? 對不起,英語和描述很差。 希望我不要讓您感到困惑,並希望您可以就此分享一些想法和解決方案。 謝謝。

在此處輸入圖片說明

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);
}

您應該設置為mViewPager.setOffscreenPageLimit(3); 在您的viewpager中

滾動太遠時,Fragments視圖將被破壞,您必須將狀態存儲在自定義字段中,然后在onCreateView重新使用該值。

如果要查看其工作原理,請將調試日志添加到onCreateViewonDestroyView

但是,如果您沒有太多頁面,那么增加屏幕外限制可能就足夠了。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM