且构网

分享程序员开发的那些事...
且构网 - 分享程序员编程开发的那些事

如何将OnActivityResult值分配给Listview?

更新时间:2023-02-11 18:12:02

您可以将positon传递给click事件中的新活动,然后将其传递给结果意图.

You could pass the positon to the new activity in the click event and pass it back with the result intent.

例如:

    holder.EditRemnant1.Click += delegate (object sender, System.EventArgs args)
    {
        if (remnantModel != null)
        {
            Intent intent = new Intent(context, typeof(EditRemnant));
            intent.PutExtra("OpenPopType", 2);
            intent.PutExtra("SlabNo", remnantModel.ExtSlabNo);
            intent.PutExtra("Position", position );
            context.StartActivityForResult(intent, 1);
        }
    };

在新活动中:

    protected override void OnCreate(Bundle savedInstanceState)
    {
        Intent intent = Intent;
        var position =intent.GetIntExtra("Position", -1);
        base.OnCreate(savedInstanceState);
        Intent data = new Intent();
        String text = "extSlabNo";
        data.PutExtra("extSlabNo", text);
        data.PutExtra("remWidth", 10);
        data.PutExtra("remHeight", 20);
        data.PutExtra("Position", position);
        SetResult(Result.Ok, data);
    }

然后,您可以根据正值来修改适配器中的数据:

Then you could modify the data in the adapter according to the positon value:

    public void ActivityResult(int requestCode, Result resultCode, Intent data)
    {
        switch (requestCode)
        {
            case 1:
                if (data != null)
                {
                    try
                    {
                        string remSlab = data.GetStringExtra("extSlabNo");
                        int position = data.GetIntExtra("Position", -1);
                        if (remSlab != null && position >= 0)
                        {
                            RemnantList[position].Width = data.GetIntExtra("remWidth", -1);
                            RemnantList[position].Height = data.GetIntExtra("remHeight", -1);
                            NotifyDataSetChanged();
                        }
                    }
                    catch (Exception ex)
                    {
                        var method = System.Reflection.MethodBase.GetCurrentMethod();
                        var methodName = method.Name;
                        var className = method.ReflectedType.Name;
                        MainActivity.SaveLogReport(className, methodName, ex);
                    }
                }
                break;
        }

并使用MainActivity OnActivityResult()方法重置适配器:

And reset the adapter in MainActivity OnActivityResult() method :

public class MainActivity : AppCompatActivity
{
    RemnantListAdapter remnantListAdapter;
    ListView listView;
    protected override void OnCreate(Bundle savedInstanceState)
    {
        base.OnCreate(savedInstanceState);
        SetContentView(Resource.Layout.activity_main);
        List<InventorySlabs> remnantList = new List<InventorySlabs>();
        for(var i = 0; i < 10; i++)
        {
            InventorySlabs inventorySlabs = new InventorySlabs();
            inventorySlabs.Depth = i.ToString();
            inventorySlabs.ExtSlabNo = i.ToString();
            inventorySlabs.Finish = "Finish" + i.ToString();
            inventorySlabs.Height = 200;
            inventorySlabs.SellName = "SellName" + i.ToString();
            inventorySlabs.Status = "Status" + i.ToString();
            inventorySlabs.Width = 400;
            remnantList.Add(inventorySlabs);
        }
        listView = FindViewById<ListView>(Resource.Id.listView1);
        remnantListAdapter = new RemnantListAdapter(this, remnantList);
        listView.Adapter = remnantListAdapter;
    }

    protected override void OnActivityResult(int requestCode, [GeneratedEnum] Result resultCode, Intent data)
    {
        remnantListAdapter.ActivityResult(requestCode, resultCode, data);
        listView.Adapter = remnantListAdapter;
    }      
}