当我单击片段2中的背面按钮时,如何将用户的选择保留在片段1中



i在fragment1:

  • 旋转器类别。
  • adiogroup类型的ad。
  • 图像视图我从画廊获得图像,我库存路径在可变路径中。

fragment2包含书籍,价格..和按钮的标题回到fragment1。

    backToFrgFirst.setOnClickListener(new View.OnClickListener() {
        @Override
        public void onClick(View v) {
            FragmentTransaction transection = getFragmentManager().beginTransaction();
            AddBookPhotosFragment mfragment = new AddBookPhotosFragment();
            transection.replace(R.id.mainFrame, mfragment ).addToBackStack( "TAG" ).commit();

        }
    });

当我返回片段时,数据是重置的,并且没有保留用户的选择。

使用Fragment 1:

的更新

公共类addbook fragment扩展了片段apapterview.onitemclicklistener {

private static final String TAG = AddBookPhotosFragment.class.getSimpleName();
// Variable declared 
@Override
public View onCreateView(LayoutInflater inflater, ViewGroup container,
                         Bundle savedInstanceState) {
    final View rootView = inflater.inflate(R.layout.fragment_add_book_photos,
            container, false);
    auth = FirebaseAuth.getInstance();
    mDatabase = FirebaseDatabase.getInstance();
    myRef = mDatabase.getReference("categories");
    spinnerCat = (Spinner) rootView.findViewById(R.id.spinner_cat_book);
    radioGroup = (RadioGroup) rootView.findViewById(R.id.type_annonce_radio_btn);
    selectImage = (ImageView) rootView.findViewById(R.id.book_picture);
    nextbtn = (Button) rootView.findViewById(R.id.next_Button_frg_photo);
    myRef.addValueEventListener(new ValueEventListener() {
        @Override
        public void onDataChange(DataSnapshot dataSnapshot) {
            final List<String> catListBook = new ArrayList<String>();
            for (DataSnapshot snapshot : dataSnapshot.getChildren()) {
                Categoriesbook book = snapshot.getValue(Categoriesbook.class);
                String catBook = book.getNom_cat();
                catListBook.add(catBook);
            }
            ArrayAdapter<String> catAdapter = new ArrayAdapter<String>(getActivity(), android.R.layout.simple_spinner_item, catListBook);
            spinnerCat.setAdapter(catAdapter);
        }
        @Override
        public void onCancelled(DatabaseError databaseError) {
            System.out.println("The read failed: " + databaseError.getMessage());
        }
    });
    spinnerCat.setOnItemSelectedListener(new AdapterView.OnItemSelectedListener() {
        @Override
        public void onItemSelected(AdapterView<?> parent, View view, int position, long id) {
            catlivre = (String) parent.getItemAtPosition(position);
        }
        @Override
        public void onNothingSelected(AdapterView<?> parent) {
        }
    });
    radioGroup.setOnCheckedChangeListener(new RadioGroup.OnCheckedChangeListener() {
        @Override
        public void onCheckedChanged(RadioGroup group, int checkedId) {
            radiobtn = (RadioButton) rootView.findViewById(checkedId);
            rdBtnText = (String) radiobtn.getText();
        }
    });

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

    nextbtn.setOnClickListener(new View.OnClickListener() {
        @Override
        public void onClick(View v) {
            FragmentTransaction transection = getFragmentManager().beginTransaction();
            AddBookInfosFragment mfragment = new AddBookInfosFragment();
            Bundle bundle = new Bundle();
            bundle.putString("catSelected", catlivre);
            bundle.putString("typeAnSelected", rdBtnText);
            bundle.putString("uRI", filePath.toString());
            mfragment.setArguments(bundle);
            transection.replace(R.id.mainFrame, mfragment).addToBackStack(TAG);
            transection.commit();

        }
    });
    return rootView;
}

private void showFileChooser() {
    Intent intent = new Intent();
    intent.setType("image/*");
    intent.setAction(Intent.ACTION_GET_CONTENT);
    startActivityForResult(Intent.createChooser(intent, "Select Picture"), PICK_IMAGE_REQUEST);
}

@Override
public void onActivityResult(int requestCode, int resultCode, Intent data) {
    super.onActivityResult(requestCode, resultCode, data);
    if (requestCode == PICK_IMAGE_REQUEST && resultCode == getActivity().RESULT_OK && data != null && data.getData() != null) {
        filePath = data.getData();
        try {
            Bitmap bitmap = MediaStore.Images.Media.getBitmap(getActivity().getContentResolver(), filePath);
            selectImage.setImageBitmap(bitmap);
        } catch (IOException e) {
            e.printStackTrace();
        }
    }
}

}

您需要获取值并保存它,然后在返回时设置新值。您可以保存在文件或SharedPreference

SharedPreference sharedPref = getSharedPreference("preFileName", MODE_PRIVATE);
SharedPreference.Editor editor = sharedPref.edit();
edit.putInt("keyValue", spinner1.getSelectedItemPosition());

,然后获取值并将其设置为旋转器。

spinner1.setSelection(getSharedPreference("preFileName", MODE_PRIVATE).getInt("keyValue", 0));

您可以尝试通过InstanceState进行操作:

fragment1需要保存数据。为了做到这一点,需要覆盖onsaveinstancestate方法:

@Override
public void onSaveInstanceState(Bundle outState) {
    outState.putString("key1", "what_to_store");
    outState.putBoolean("checked1", true);
    //in addition put any other string, int, or whatever you want by outState.putSOMETHING
    super.onSaveInstanceState(outState);
}

之后,您需要通过覆盖另一种方法来接收同一片段中的数据:

public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        String myString = "";
        boolean myBoolean1 = false;
        if (savedInstanceState != null) {
            myString = savedInstanceState.getString("key1");
            myBoolean1 = savedInstanceState.getBoolean("checked1");
            //do something with your myString. For example bind your image src with resource from this string            
        }
    }

因此,您需要存储接收要保存的所有数据:radiogroup按钮,文本,图像SRC等。

请使用保存的即时状态与AS Bundle一起使用,任何您想保留它都会活着,直到您致电分离或系统呼叫dictach

最新更新