2016-06-02 11 views
0

Ich habe ein benutzerdefiniertes Drehfeld mit einer ArrayList in einer Aktivität definiert. Bei ausgewählten Objekten wird ein neues Fragment erstellt. Kann ich den Wert des Fragments, das erstellt wurde ("Single Massage" oder "Couples Massage"), an ein anderes Fragment innerhalb der gleichen Aktivität weitergeben und dann von diesem Fragment an eine andere Aktivität weitergeben und seine Textansicht aktualisieren? Dies ist vielleicht nicht der beste Ansatz, aber ich bin ein Anfänger, also weiß ich wirklich nicht so viel. Hier ist mein Code.Übergeben von Drehfeldwert von Aktivität an Fragment

Spinner:

public class MassageActivity extends AppCompatActivity { 
private Spinner mSpinner; 
private Toolbar mToolbar; 
private FragmentManager mFragmentManager; 
private FragmentTransaction mFragmentTransaction; 

@Override 
protected void onCreate(Bundle savedInstanceState) { 
    super.onCreate(savedInstanceState); 
    setContentView(R.layout.activity_massage); 
    mToolbar = (Toolbar) findViewById(R.id.toolbar_massage); 
    setSupportActionBar(mToolbar); 
    ActionBar ab = getSupportActionBar(); 
    if (ab != null) { 
     ab.setDisplayHomeAsUpEnabled(true); 
    } 
    if (ab != null) { 
     ab.setDisplayShowTitleEnabled(false); 
    } 
    customSpinner(); 

    mFragmentManager = getSupportFragmentManager(); 
}private void customSpinner() { 
    final ArrayList<String> massageType = new ArrayList<>(); 
    massageType.add("Single Massage"); 
    massageType.add("Couples Massage"); 
    massageType.add("Pamper Party"); 
    mSpinner = (Spinner) findViewById(R.id.spinner); 

    CustomSpinnerAdapter spinnerAdapter = new CustomSpinnerAdapter(getApplicationContext(), massageType); 
    mSpinner.setAdapter(spinnerAdapter); 

    mSpinner.setOnItemSelectedListener(new AdapterView.OnItemSelectedListener() { 
     @Override 
     public void onItemSelected(AdapterView<?> parent, View view, int position, long id) { 
      if (parent.getItemAtPosition(position).toString() 
        .equals("Pamper Party")) { 
       mFragmentTransaction = mFragmentManager.beginTransaction(); 
       mFragmentTransaction.replace(R.id.fragment_container_massage, 
         new PamperPartyFragment()).commit(); 
      } 
      if (parent.getItemAtPosition(position).toString() 
        .equals("Single Massage")) { 
       mFragmentTransaction = mFragmentManager.beginTransaction(); 
       mFragmentTransaction.replace(R.id.fragment_container_massage, 
         new SingleMassageFragment()).commit(); 
      } 
      if (parent.getItemAtPosition(position).toString() 
        .equals("Couples Massage")){ 
       mFragmentTransaction = mFragmentManager.beginTransaction(); 
       mFragmentTransaction.replace(R.id.fragment_container_massage, 
         new CouplesMassageFragment()).commit(); 
      } 

     } 

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

     } 
    }); 

}} 

EDIT: folgte ich das und das getan:

String spinnerValue = mSpinner.getSelectedItem().toString(); 
    Intent i = new Intent(this, SingleMassageFragment.class); 
    i.putExtra("spinnerValue", spinnerValue); 
    setIntent(i); 

Und dann in meinem Fragment:

MassageActivity activity = (MassageActivity) getActivity(); 
    Intent f = activity.getIntent(); 
    String spinnerValue = f.getStringExtra("spinnerValue"); 
    Utils.doToast(getContext(), spinnerValue); 

Aber je nachdem, was Fragment wähle ich, ich Immer den gleichen Toast "Single Massage" bekommen. Warum das? Für jeden Fall hier ist mein Adapter:

public class CustomSpinnerAdapter extends BaseAdapter { 
private Context mContext; 
private ArrayList<String> mMassageType; 
private LayoutInflater mInflater; 
private TextView tvSpinner; 

public CustomSpinnerAdapter(Context context, ArrayList<String> massageType) { 
    mContext = context; 
    mMassageType = massageType; 
    mInflater = (LayoutInflater.from(context)); 
} 

@Override 
public int getCount() { 
    return mMassageType.size(); 
} 

@Override 
public Object getItem(int position) { 
    return mMassageType.get(position); 
} 

@Override 
public long getItemId(int position) { 
    return (long) position; 
} 

@Override 
public View getView(int position, View convertView, ViewGroup parent) { 
    convertView = mInflater.inflate(R.layout.spinner_layout, null); 
    tvSpinner = (TextView) convertView.findViewById(R.id.tvSpinner); 
    tvSpinner.setText(mMassageType.get(position)); 
    return convertView; 
} 

}

Antwort

1

Übergeben von Daten

PamperPartyFragment mPamperPartyFragment = new PamperPartyFragment(); 
    Bundle bundle = new Bundle(); 
    bundle.putInt(key, value); 
    mPamperPartyFragment.setArguments(bundle); 

mFragmentTransaction = mFragmentManager.beginTransaction(); 
       mFragmentTransaction.replace(R.id.fragment_container_massage, 
         mPamperPartyFragment ).commit(); 

für Daten in Fragment Erste

Bundle bundle = this.getArguments(); 
int myInt = bundle.getInt(key, defaultValue); 

try Thi s in Ihren Spinnern setOnItemSelectedListener Daten zu senden

Bundle bundle = new Bundle(); 
    bundle.putString("spinnerValue",parent.getItemAtPosition(position).toString()); 
    mPamperPartyFragment.setArguments(bundle); 
    mFragmentTransaction = mFragmentManager.beginTransaction(); 
    mFragmentTransaction.replace(R.id.fragment_container_massage, 
      mPamperPartyFragment ).commit(); 

Daten in Ihrem Fragmente fügen Sie diese in Ihren onCreate

Bundle bundle = getArguments(); 
    String selectedVAlue = bundle.getString("spinnerValue"); 
+0

Sie auch String/boolean usw. Datentyp –

+0

Thank passieren können zu lesen du für deine Antwort! Ich möchte den Wert, der von den drei Fragmenten im Spinner ausgewählt wurde, an ein anderes Fragment übergeben, das sich von den drei oben unterscheidet. Ist das möglich? – jlively

+0

@jlively Ja, Sie können Daten in einem anderen Fragment übergeben –

1
in activity : 

Intent i = new Intent (this, fragmentname.class); 
i.putInt(key, value); 
setIntent(i); 

in fragment : 

ActivityName activity = (ActivityName) getActivity(); 
Intent f= activity.getIntent();  
int yrid = f.getIntExtra(key); 
+0

Das funktioniert, aber ich brauche eine Anleitung. 'String spinnerValue = mSpinner.getSelectedItem(). ToString(); ' Absicht i = neue Absicht (dies, CouplesMassageFragment.class); i.putExtra ("SpinnerValue", SpinnerValue); setIntent (i); ' Und dann in meinem Fragment: ' MassageActivity Aktivität = (MassageActivity) getActivity(); Absicht f = activity.getIntent(); String spinnerValue = f.getStringExtra ("spinnerValue"); Utils.doToast (getContext(), spinnerValue); ' Aber der Toast sagt" Single Massage ". – jlively

Verwandte Themen