简体   繁体   English

将微调器值从活动传递到片段

[英]Passing spinner value from activity to fragment

I have a custom spinner with an ArrayList defined in an activity. 我在活动中定义了带有ArrayList的自定义微调器。 On selected item a new fragment is created. 在所选项目上,将创建一个新片段。 Can I pass the value of which fragment was created ("Single Massage" or "Couples Massage") to another fragment within the same activity and then from that fragment pass it to another activity and update its textview? 我可以将创建了哪个片段的值(“单次按摩”或“情侣按摩”)传递给同一活动中的另一个片段,然后从该片段传递给另一个活动并更新其textview吗? This might not be the best approach, but I am a beginner, so I really don't know that much. 这可能不是最好的方法,但是我是一个初学者,所以我真的并不那么了解。 Here is my code. 这是我的代码。

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: I followed the and done this: 编辑:我遵循了并做到了:

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

And then in my fragment: 然后在我的片段中:

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

But whichever fragment I selected, I always get the same toast "Single Massage". 但是,无论选择哪个片段,我都会得到相同的吐司“单次按摩”。 Why is that? 这是为什么? For any case here's my 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;
}

} }

To Pass Data 传递数据

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

For Getting data in fragment 用于获取片段数据

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

try This in your spinner setOnItemSelectedListener to send data 尝试在微调器setOnItemSelectedListener中发送数据

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

to read data in your fragment add this in your onCreate 读取片段中的数据,将其添加到onCreate

    Bundle bundle = getArguments();
    String selectedVAlue = bundle.getString("spinnerValue");
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);  

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM