如何在Android中访问另一个片段中的字符串
我试图从登录页面上的EditText中访问一个字符串,以便在其他片段中使用。我找到了一些关于使用Bundle实现这一点的信息,但是我在实现这一功能时遇到了一些困难。我有一个临时文本视图,我正在将字符串分配给它,这样我就可以知道它何时工作,所以忽略这个对象(tvGetTest) 登录类别:如何在Android中访问另一个片段中的字符串,android,string,bundle,Android,String,Bundle,我试图从登录页面上的EditText中访问一个字符串,以便在其他片段中使用。我找到了一些关于使用Bundle实现这一点的信息,但是我在实现这一功能时遇到了一些困难。我有一个临时文本视图,我正在将字符串分配给它,这样我就可以知道它何时工作,所以忽略这个对象(tvGetTest) 登录类别: @Override public View onCreateView(final LayoutInflater inflater, final ViewGroup container,
@Override
public View onCreateView(final LayoutInflater inflater, final ViewGroup container,
Bundle savedInstanceState) {
final View rootView = inflater.inflate(R.layout.fragment_login, container, false);
etAccountNumber = (EditText) rootView.findViewById(R.id.etAccountNumber);
rbGroup = (RadioGroup) rootView.findViewById(R.id.rbGroup);
rbUsa = (RadioButton) rootView.findViewById(R.id.rbUsa);
rbCanada = (RadioButton) rootView.findViewById(R.id.rbCanada);
btnLogin = (Button) rootView.findViewById(R.id.btnLogin);
Fragment fragment = new Fragment();
Bundle bundle = new Bundle();
bundle.putString(accountNumber, accountNumber);
bundle.putString(countryCode, countryCode);
fragment.setArguments(bundle);
btnLogin.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
doLogin();
}
});
return rootView;
}
public void doLogin() {
accountNumber = etAccountNumber.getText().toString();
if (rbUsa.isChecked()) {
countryCode = "USA";
}
else if (rbCanada.isChecked()) {
countryCode = "CAN";
}
}
一旦创建其他片段类:
tvGetTest = (TextView) rootView.findViewById(R.id.tvGetTest);
Bundle bundle = this.getArguments();
if (bundle != null) {
String aNo = bundle.getString("accountNumber");
tvGetTest.setText(aNo);
}
编辑:
最好从宿主活动中管理所有片段,避免嵌套片段。 在您的用例中,您应该在
HostActivity
中定义一个名为launchOtherFragment
的方法:
public void launchOtherFragment(String accountNumber, String countryCode)
{
Bundle bundle = new Bundle();
bundle.putString("accountNumber", accountNumber);
bundel.putString("countryCode", countryCode);
OtherFragment fragment = new OtherFragment();
fragment.setArguments(bundle);
getFragmentManager().beginTransaction().replace(R.id.fragment_container, fragment).commit();
}
现在,您可以在第一个片段中访问此方法,因此在doLogin
中:
private void doLogin() {
accountNumber = etAccountNumber.getText().toString();
if (rbUsa.isChecked()) {
countryCode = "USA";
}
else if (rbCanada.isChecked()) {
countryCode = "CAN";
}
((HostActivity)getActivity()).launchOtherFragment(accountNumber, countryCode);
}
为什么要使用
片段
?您应该使用扩展片段的类。。第二,从哪里添加另一个片段?我认为你应该在你的活动中这样做;你能详细说明一下吗?我有一个名为AvailabilityFragment的片段,它扩展了这个片段。在我的帖子中,我把这个类称为“其他片段类”。你应该在你的活动中有一个添加其他片段的方法,该方法接受参数accountNumber
和countryCode
,将它们放在一个包中,将该包放在你的新片段中,并通过fragmentmanager添加片段。然后,在doLogin
中调用该方法。我添加了一个编辑,对吗?片段中有一个片段。这似乎不对。我正在使用TabLayout,所以我不确定是否有HostActivity,但我确实有MainActivity。我试图在这里实现,但无法解析OtherFragment。
private void doLogin() {
accountNumber = etAccountNumber.getText().toString();
if (rbUsa.isChecked()) {
countryCode = "USA";
}
else if (rbCanada.isChecked()) {
countryCode = "CAN";
}
((HostActivity)getActivity()).launchOtherFragment(accountNumber, countryCode);
}