-1

J'ai utilisé la navigation drawable à partir de android studio 2.2.3 avec des fragments comme frag1, frag2 Je veux envoyer des valeurs de spinner sélectionnés à tous les fragments, j'ai réussi à envoyer premier élément spinner sélectionné à tous les fragments en utilisant bundle mais quand je sélectionne le deuxième élément de la liste élément de spinner travail rien, voici mes codesAndroid Navigation Dessiner envoyer valeur spinnern au fragment

public class MainActivity extends AppCompatActivity implements NavigationView.OnNavigationItemSelectedListener { 
String data1; 
@Override 
protected void onCreate(Bundle savedInstanceState) { 
    super.onCreate(savedInstanceState); 
    setContentView(R.layout.activity_main); 
    Toolbar toolbar = (Toolbar) findViewById(R.id.toolbar); 
    setSupportActionBar(toolbar); 


    DrawerLayout drawer = (DrawerLayout) findViewById(R.id.drawer_layout); 
    ActionBarDrawerToggle toggle = new ActionBarDrawerToggle(
      this, drawer, toolbar, R.string.navigation_drawer_open, R.string.navigation_drawer_close); 
    drawer.setDrawerListener(toggle); 
    toggle.syncState(); 

    NavigationView navigationView = (NavigationView) findViewById(R.id.nav_view); 
    navigationView.setNavigationItemSelectedListener(this); 

    //add this line to display menu1 when the activity is loaded 
    displaySelectedScreen(R.id.nav_menu1); 
} 

@Override 
public void onBackPressed() { 
    DrawerLayout drawer = (DrawerLayout) findViewById(R.id.drawer_layout); 
    if (drawer.isDrawerOpen(GravityCompat.START)) { 
     drawer.closeDrawer(GravityCompat.START); 
    } else { 
     super.onBackPressed(); 
    } 
} 

@Override 
public boolean onCreateOptionsMenu(Menu menu) { 
    // Inflate the menu; this adds items to the action bar if it is present. 
    getMenuInflater().inflate(R.menu.main, menu); 
    ArrayList<String> list = new ArrayList<String>(); 
    list.add("Top News"); 
    list.add("Politics"); 
    list.add("Business"); 
    list.add("Sports"); 
    list.add("Movies"); 
    MenuItem item = menu.findItem(R.id.spinner); 
    Spinner spinner = (Spinner) MenuItemCompat.getActionView(item); 
    spinner.setAdapter(new ArrayAdapter<String>(this, android.R.layout.simple_spinner_dropdown_item, list)); 
    data1=spinner.getSelectedItem().toString(); 
    Toast.makeText(MainActivity.this, spinner.getSelectedItem().toString(),Toast.LENGTH_LONG).show(); 
    return true; 
} 

@SuppressWarnings("StatementWithEmptyBody") 
@Override 
public boolean onNavigationItemSelected(MenuItem item) { 
    int id = item.getItemId(); 
    displaySelectedScreen(item.getItemId()); 
    return true; 
} 

private void displaySelectedScreen(int itemId) { 
    //creating fragment object 
    Fragment fragment = null; 
    switch (itemId) { 
     case R.id.nav_menu1: 
      fragment = new frag1(); 
      break; 
     case R.id.nav_menu2: 
      fragment = new frag2(); 
      Bundle data2 = new Bundle(); 
      data2.putString("data", data1); 
      fragment.setArguments(data2); 
      break; 
     case R.id.nav_menu3: 
      fragment = new frag3(); 
      Bundle data = new Bundle(); 
      data.putString("data", data1); 
      fragment.setArguments(data); 
      break; 
    } 

    if (fragment != null) { 
     FragmentTransaction ft = getSupportFragmentManager().beginTransaction(); 
     ft.replace(R.id.content_frame, fragment); 
     ft.commit(); 
    } 

    DrawerLayout drawer = (DrawerLayout) findViewById(R.id.drawer_layout); 
    drawer.closeDrawer(GravityCompat.START); 
} 

}

public class frag2 extends Fragment { 
@Nullable 
@Override 
public View onCreateView(LayoutInflater inflater, @Nullable ViewGroup container, @Nullable Bundle savedInstanceState) { 
    View view = inflater.inflate(R.layout.fragment_menu_3, container, false); 
    TextView text = (TextView) view.findViewById(R.id.textView3); 
    String getArgument = getArguments().getString("data"); 
    text.setText(getArgument); 
    return view; 
} 
@Override 
public void onViewCreated(View view, @Nullable Bundle savedInstanceState) { 
    super.onViewCreated(view, savedInstanceState); 
    getActivity().setTitle("Menu 1"); 
} 

}

Alors où et comment puis-je modifier ou mes codes afin que 1.i puisse envoyer l'élément de fileur sélectionné à tous les fragments? 2.i peut conserver l'état de la valeur de spinner sélectionnée lors de la navigation entre les fragments?

Répondre

1

Utiliser auditeur onItemSelected et effectuer une opération que vous souhaitez effectuer il

spinner.setOnItemSelectedListener(new OnItemSelectedListener() { 
      @Override 
      public void onItemSelected(AdapterView<?> parent, View view, int position, long id) { 
       //Here 
      } 

      @Override 
      public void onNothingSelected(AdapterView<?> parent) { 

      } 
     }); 
+0

merci comment puis-je résoudre le numéro de numéro 2 @Sinistro – f2k

+0

Vous avez la chaîne dans le faisceau établi que, pour spinner et accepter la réponse si cette aidé. –