[英]Passing spinner value from activity to fragment
我在活动中定义了带有ArrayList的自定义微调器。 在所选项目上,将创建一个新片段。 我可以将创建了哪个片段的值(“单次按摩”或“情侣按摩”)传递给同一活动中的另一个片段,然后从该片段传递给另一个活动并更新其textview吗? 这可能不是最好的方法,但是我是一个初学者,所以我真的并不那么了解。 这是我的代码。
微调器:
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) {
}
});
}}
编辑:我遵循了并做到了:
String spinnerValue = mSpinner.getSelectedItem().toString();
Intent i = new Intent(this, SingleMassageFragment.class);
i.putExtra("spinnerValue", spinnerValue);
setIntent(i);
然后在我的片段中:
MassageActivity activity = (MassageActivity) getActivity();
Intent f = activity.getIntent();
String spinnerValue = f.getStringExtra("spinnerValue");
Utils.doToast(getContext(), spinnerValue);
但是,无论选择哪个片段,我都会得到相同的吐司“单次按摩”。 这是为什么? 无论如何,这是我的适配器:
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;
}
}
传递数据
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();
用于获取片段数据
Bundle bundle = this.getArguments();
int myInt = bundle.getInt(key, defaultValue);
尝试在微调器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();
读取片段中的数据,将其添加到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.