Activity代码
String phone = ((EditText) findViewById(R.id.phone))
.getText().toString();
if (phone.isEmpty()) {
Toast.makeText(ForgetPsdActivity.this, "请输入手机号码",
Toast.LENGTH_LONG).show();
break;
} else {
ForgetPSD2Fragment fragment2 = new ForgetPSD2Fragment();
transaction.replace(R.id.fragmentcontainer, fragment2);
fragment2.setViewPhone(phone);
transaction.addToBackStack(null);
step = 2;
}
fragment2代码
public class ForgetPSD2Fragment extends Fragment {
private View view;
private TextView txtPhone;
@Override
public View onCreateView(LayoutInflater inflater, ViewGroup container,
Bundle savedInstanceState) {
view = inflater.inflate(R.layout.forgetpsd2, container, false);
txtPhone = (TextView) view.findViewById(R.id.txtphone);
return view;
}
public void setViewPhone(String phone) {
if (txtPhone == null) {
Log.i("debug", phone + "abs");
}else{
txtPhone.setText(phone);
}
}
}
上边是我写的在Activity与fragment之间通信的例子,但是测试发现在调用fragment2.setViewPhone(phone);的时候,txtPhone为null值,请教一下是为什么,有什么解决办法可以处理这个问题?
fragment2.setViewPhone(phone);//这时候还没初始化
用
Bundle bundle = new Bundle();
bundle.putString("order", "1111");
fragment.setArguments(bundle);
然后在fragment中
String name = getArguments().getString("order");
ForgetPSD2Fragment fragment2 = new ForgetPSD2Fragment();仅仅是实例化了一个fragment。
你的txtPhone是在fragment的方法onCreateView中实例化的。
而fragment只有在事务提交之后才进入生命周期。
fragment2.setViewPhone(phone);执行时,你还没有提交事务,所以根本就没有进入fragment的生命周期,自然也就没有执行onCreateView方法。
所以txtPhone仅仅是被声明,而没有被实例化,自然是空值。