2016-03-03 74 views
0

我有一個列表視圖,當ListView上的一個按鈕被點擊時,它應該改變ListView外部的TextView的文本。當ListView中的按鈕點擊時,改變ListView外部的TextView文本

我想:

初始化ViewHolder

內TextView的並具有主類的功能,這將是打電話的時候在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(); 
       } 
     } 
} 
+0

使得按鈕靜做了工作 – PLOW

回答

1

您從按鈕獲取回調的方式是錯誤的。 爲此,請執行以下操作: 在適配器中爲按鈕單擊創建事件。 當你想設置列表視圖適配器,添加一個回調到你的事件,改變textview文本。 在你的GetView或你的聯編程序(或任何你綁定視圖的地方)中,添加事件處理程序到你的按鈕點擊事件。 所以在您的活動:

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; 
    } 
相關問題