在android学习中经常需要在Activity 和 Fragment 传值,目前比较流行的主流方法是使用Bundle进行传值
具体的方式如下:
startActivityForResult 和 setResult(RESULT_CANCELED, this.getIntent().putExtras(bundle)); //把Activity设置好值返回Fragment
在Frament在设置bundle需要传输的参数,并且重写OnActivityResult
public class FragmentTab3 extends Fragment implements OnClickListener {
private FragmentManager fragmentManager; //创建fragmentManager
private View speedLayout;
private int age = 0;
public View onCreateView(final LayoutInflater inflater, final ViewGroup container,
Bundle savedInstanceState) {
final View view = inflater.inflate(R.layout.fragment_tab3, container, false);
speedLayout = view.findViewById(R.id.speed_layout);
speedLayout.setOnClickListener(this);
return view;
}
@Override
public void onClick(View v) {
Intent intent;
switch (v.getId()) {
case R.id.speed_layout:
intent = new Intent(getActivity(), FragmentTab3_speed.class);
Bundle bundle = new Bundle();
bundle.putInt("speed",age);
intent.putExtras(bundle);
startActivityForResult(intent,Activity.RESULT_FIRST_USER); //传值启动Activity,并且返回结果
break;
default:
break;
}
}
@Override
public void onActivityResult(int requestCode, int resultCode, Intent data) {
if (requestCode == Activity.RESULT_FIRST_USER) {
if (resultCode == RESULT_CANCELED) {
Bundle bundle = data.getExtras();
age = bundle.getInt("speed",0);
}
}
}
}
在activity中
public class FragmentTab3_speed extends Activity implements OnClickListener{
private ImageView Speedback_button;
private ImageView Pic10;
private ImageView Pic18;
private ImageView Pic20;
private View Speed10;
private View Speed18;
private View Speed20;
private int age;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.fragment_tab3_speed);
Speedback_button = (ImageView) findViewById(R.id.speedback_button);
Speed10 = (View)findViewById(R.id.speed10);
Speed18 = (View)findViewById(R.id.speed18);
Speed20 = (View)findViewById(R.id.speed20);
Pic10 = (ImageView) findViewById(R.id.pic10);
Pic18 = (ImageView) findViewById(R.id.pic18);
Pic20 = (ImageView) findViewById(R.id.pic20);
Intent intent = getIntent();
age = intent.getIntExtra("speed",0); //获得FragmnetTab传过来的值
SetDisplay(age);
Speedback_button.setOnClickListener(this);
Speed10.setOnClickListener(this);
Speed18.setOnClickListener(this);
Speed20.setOnClickListener(this);
}
@Override
public void onClick(View v) {
switch (v.getId()) {
case R.id.speedback_button:
Bundle bundle = new Bundle();
bundle.putInt("speed", age);
setResult(RESULT_CANCELED, this.getIntent().putExtras(bundle)); //把Activity设置好值返回Fragment
finish();
break;
case R.id.speed10:
SetDisplay(0);
age = 0;
break;
case R.id.speed18:
SetDisplay(1);
age = 1;
break;
case R.id.speed20:
SetDisplay(2);
age = 2;
break;
default:
break;
}
}
private void SetDisplay(int value)
{
Pic10.setVisibility(View.INVISIBLE);
Pic18.setVisibility(View.INVISIBLE);
Pic20.setVisibility(View.INVISIBLE);
switch (value)
{
case 0:
Pic10.setVisibility(View.VISIBLE);
break;
case 1:
Pic18.setVisibility(View.VISIBLE);
break;
case 2:
Pic20.setVisibility(View.VISIBLE);
break;
default:
Pic10.setVisibility(View.VISIBLE);
break;
}
}
}