使用界面

时间:2018-10-23 12:03:46

标签: android visual-studio xamarin

我有一个基于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其他所有数据?
如果有人可以看到修复程序以达到期望的结果,请留下一些评论。 谢谢!

1 个答案:

答案 0 :(得分:0)

一种简单的方法是,在第一个片段中创建一个静态字符串并将其更改为editText中存在的字符串,现在您可以在第二个片段中使用此静态变量来检索第一个片段中的editText数据