我有一个基于Visual Studio Xamarin
的Android项目,其中有一个包含4个片段的活动。使用ViewPagerAdapter
将片段添加到活动中。我正在尝试使用第一个片段中的值更新第二个片段上的EditText
。我使用界面来实现此目的,但是有一些问题。
下面是我的第一个片段,它提供了更新第二个片段中的EditText的值:
我的界面:
public interface IOnFragmentDetailsCallbackReceived
{
void UpdatePackageNo(string updatedPackageNo);
}
我的OnAttach:
public override void OnAttach(Context context)
{
base.OnAttach(context);
_updatedPackageNo = (IOnFragmentDetailsCallbackReceived) context;
}
我如何获得价值:
private void AddPackageToList()
{
_packages.Add(_labelPackage);
_adapterPackage = new ArrayAdapter<String>(Context, Android.Resource.Layout.SimpleListItem1, _packages.ToArray());
_adapterPackage.NotifyDataSetChanged();
_listViewPackages.Adapter = _adapterPackage;
//update the orders counter
_txtViewPackagesCount.Text = $"({Packages.Count})";
_updatedPackageNo.UpdatePackageNo(Packages.Count.ToString());
}
到目前为止,该值已正确检索。现在在下面,您可以看到我在活动中拥有的代码:
public void UpdatePackageNo(string updatedPackageNo)
{
FragmentDetails newFragmentDetails = new FragmentDetails();
newFragmentDetails.GetStringFromFragOrders(updatedPackageNo);
}
对于以上内容,我从片段中获取了正确的值。 下面,我将向您展示我尝试更新EditText值的第二个片段中的代码:
public void OnFocusChange(View v, bool hasFocus)
{
GetStringFromFragOrders(_editTextNoOfPackages.Text);
}
public void GetStringFromFragOrders(string updatedPackageNo)
{
_editTextNoOfPackages.SetText(updatedPackageNo, TextView.BufferType.Normal);
}
我遇到的问题是在GetStringFromFragOrders(string updatedPackageNo)
方法中,_editTextNoOfPackages
始终为null
。
在此片段上,我还有其他EditText
字段,我想为其保留值。
我在活动中尝试了以下代码:
public void UpdatePackageNo(string updatedPackageNo)
{
FragmentDetails fragment = new FragmentDetails();
Bundle args = new Bundle();
args.PutString("packageNo", updatedPackageNo);
fragment.Arguments = args;
FragmentTransaction transaction = SupportFragmentManager.BeginTransaction();
transaction.Replace(Resource.Id.create_frame, fragment, "updatedFragment");
transaction.AddToBackStack("updatedFragment");
transaction.Commit();
}
在接收片段中,我使用了以下内容:
_receivedData = Arguments.GetString("packageNo");
public void OnFocusChange(View v, bool hasFocus)
{
_editTextNoOfPackages.Text = _receivedData;
}
这将更新EditText
,但由于replace语句,不幸地擦除了所有其他EditText
数据。
如何在不擦除的情况下更新一个EditText
其他所有数据?
如果有人可以看到修复程序以达到期望的结果,请留下一些评论。
谢谢!
答案 0 :(得分:0)
一种简单的方法是,在第一个片段中创建一个静态字符串并将其更改为editText中存在的字符串,现在您可以在第二个片段中使用此静态变量来检索第一个片段中的editText数据