如何在Android中访问另一个片段中的字符串

如何在Android中访问另一个片段中的字符串,android,string,bundle,Android,String,Bundle,我试图从登录页面上的EditText中访问一个字符串,以便在其他片段中使用。我找到了一些关于使用Bundle实现这一点的信息,但是我在实现这一功能时遇到了一些困难。我有一个临时文本视图,我正在将字符串分配给它,这样我就可以知道它何时工作,所以忽略这个对象(tvGetTest) 登录类别: @Override public View onCreateView(final LayoutInflater inflater, final ViewGroup container,

我试图从登录页面上的EditText中访问一个字符串,以便在其他片段中使用。我找到了一些关于使用Bundle实现这一点的信息,但是我在实现这一功能时遇到了一些困难。我有一个临时文本视图,我正在将字符串分配给它,这样我就可以知道它何时工作,所以忽略这个对象(tvGetTest)

登录类别:

 @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);
}