-2

There is a spinner in MainActivity and 1 text box in fragment. My task is to change the value of text box according to the recently selected spinner value. My code works well, but the textbox changes its state only after 2 swipes. I don't know why this lagging happening. Help me out (Before downvoting kindly say some solutions)

Here is my code in main activity

spinner = (Spinner)findViewById(R.id.spinner2);
final ArrayAdapter<String> dataAdapter1 = new ArrayAdapter<>(this,android.R.layout.simple_spinner_item,array2);
dataAdapter.setDropDownViewResource(android.R.layout.simple_spinner_dropdown_item);
spinner.setAdapter(dataAdapter1);
spinner.invalidate();

spinner.setOnItemSelectedListener(new AdapterView.OnItemSelectedListener() {
    @Override
    public void onItemSelected(AdapterView<?> parent, View view, int position, long id) {
        //dataAdapter1.notifyDataSetChanged();
        Toast.makeText(getApplicationContext(),"well",Toast.LENGTH_LONG).show();
        String pos = (String) spinner.getSelectedItem();
        SharedPreferences sharedPref = getSharedPreferences("Mode", Activity.MODE_PRIVATE);
        SharedPreferences.Editor prefEditor = sharedPref.edit();
        prefEditor.putString("userChoicemode", pos);
        prefEditor.commit();
    }
    @Override
    public void onNothingSelected(AdapterView<?> parent) {
    }
});

My fragment code :

final TextView modeselect = (TextView) view.findViewById(R.id.pass);

final SharedPreferences sharedPref = this.getActivity().getSharedPreferences("Mode", Activity.MODE_PRIVATE);
String get = sharedPref.getString("userChoicemode",selected);

modeselect.setText("" + get);
Sash reek
  • 3
  • 5

1 Answers1

0

In your fragment

 @Override
public void setUserVisibleHint(boolean isVisibleToUser) {
    try {
        if (isVisibleToUser) {
            final TextView modeselect = (TextView) view.findViewById(R.id.pass);

final SharedPreferences sharedPref = this.getActivity().getSharedPreferences("Mode", Activity.MODE_PRIVATE);
String get = sharedPref.getString("userChoicemode",selected);

modeselect.setText("" + get);
        }
    } catch (Exception e) {
        e.printStackTrace();
    }
    super.setUserVisibleHint(isVisibleToUser);
}

just add this override method into your fragment and put the value of selected spinner item in text view of fragment in this method. your inflated view should be declared globally

Shashwat Gupta
  • 876
  • 9
  • 22
  • but one more problem bro...it changes only on swiping.i want to change my textbox value immediately after i change the spinner value – Sash reek Sep 12 '17 at 11:44
  • just put the code that sets value to your text view in a method and from your activity when on item selected call that method ExampleFragment fragment = (ExampleFragment) getFragmentManager().findFragmentById(R.id.example_fragment); fragment.(); – Shashwat Gupta Sep 12 '17 at 13:34