单击 ListView 内的按钮时更改 ListView 外的 TextView 文本

Changing TextView text outside of a ListView when a button inside the ListView is click

我有一个列表视图,当单击 ListView 上的按钮时,它应该更改 ListView 外部的 TextView 的文本。

我试过了:

正在初始化 ViewHolder 中的 TextView

并且在主 Class 中有一个函数,当单击 ListView 中的按钮时将调用该函数。

无论哪种方法,我都会在按钮上得到一个空引用。

public class ItemOrderActivity : BaseActivity <ItemOrderViewModel>
        {
            TextView estimatedTotal;
            Button continueButton;
            ListView itemList;
            int count = 0;
            static public int[] itemCount = new int[8] { 0, 0, 0, 0, 0, 0, 0, 0 };

        protected override void OnCreate (Bundle bundle)
        {
            base.OnCreate (bundle);

            // Setting layout
            SetContentView (Resource.Layout.ItemOrderLayout);

            estimatedTotal = FindViewById<TextView> (Resource.Id.estimatedTotal);

            // Initializing button view items
            continueButton = FindViewById<Button> (Resource.Id.continueButton);
            garmentList = FindViewById<ListView> (Resource.Id.itetListView);
            ItemListAdapter adapter = new ItemListAdapter(this, getItems());
            itemList.Adapter = adapter;

            // Button event for OnContinue
            continueButton.Click += OnContinue;

        }

        void total()
        {
            estimatedTotal.Text = "tet";
        }

        private class ItemListAdapter : BaseAdapter<Item>
        {
            private Activity activity;
            public List<Item> data;

            public ItemListAdapter(Activity activity, List<Item> data)
            {
                this.activity = activity;
                this.data = data;
            }

            public override Item this[int position]
            {
                get { return this.data [position]; }
            }

            public override int Count
            {
                get { return this.data.Count(); }
            }

            public override long GetItemId(int position)
            {
                return 0;
            }

            public override View GetView(int position, View convertView, ViewGroup parent)
            {
                Holder holder;
                holder = new Holder ();
                if (convertView == null) 
                {
                    convertView = this.activity.LayoutInflater.Inflate (Resource.Layout.ItemLayout, null);
                    //holder = new Holder ();
                    holder.Initialize (convertView);
                    convertView.Tag = holder;
                }

                //convertView.Tag = holder;
                Item item = this.data [position];
                holder = (Holder)convertView.Tag;
                holder.Bind (this.activity, item.itemName, position);

                return convertView;

            }

            public class Holder : Java.Lang.Object
            {
                public TextView ItemName;
                public Button removeItem;
                public Button addItem;
                public TextView itemQty;
                public int pos;
                //TextView estimatedTotal;

                public void Initialize(View view)
                {
                    itemName = view.FindViewById<TextView> (Resource.Id.itemTextView);
                    itemGarment = view.FindViewById<Button> (Resource.Id.removeItemButton);
                    itemGarment = view.FindViewById<Button> (Resource.Id.addItemButton);
                    itemQty = view.FindViewById<TextView> (Resource.Id.ItemQtyTextView);
                    //estimatedTotal = view.FindViewById<TextView> (Resource.Id.estimatedTotal);

                    addItem.Click += addItemClick;
                    removeItem.Click += removeItemClick;
                }

                public void Bind(Activity context, string gn, int position)
                {
                    garmentName.Text = gn;
                    garmentQty.Text = ItemOrderActivity.ItemCount[position].ToString();
                    pos = position;
                }

                public void addButtonClick(object sender, EventArgs e)
                {
                    poa.addItem (pos);

                    ItemOrderActivity.itemCount [pos]++;
                    itemQty.Text = ItemOrderActivity.itemCount [pos].ToString ();
                    //estimatedTotal.Text = "test";
                   poa.total();
                }
       }
}

你获取按钮回调的方式不对。 去做这个: 在您的适配器中为按钮点击创建一个事件。 当你想设置列表视图适配器时,向你的事件添加一个回调来改变文本视图文本。 在您的 GetView 或您的活页夹中(或您绑定视图的任何地方),将事件处理程序添加到您的按钮单击事件。 所以在你的 activity:

protected override void OnCreate (Bundle bundle)
    {
        //Anything before it

        ItemListAdapter adapter = new ItemListAdapter(this, getItems());
        adapter.ItemButtonClick += delegate {//Anything you want to do};
        itemList.Adapter = adapter;

    }

和您的适配器:

private class ItemListAdapter : BaseAdapter<Item>
    {
       //Anything
       public override View GetView(int position, View convertView, ViewGroup parent)
        {
           //Your code for initializing
           if(ItemButtonClick!=null)
           theButton.Click += ItemButtonClick;
        }
    public event EventHandler ItemButtonClick;
    }