2014-03-12 56 views
0

我寫了一個自定義ExpandableListView,其中Header是一個帶有TextView和Button子元素的相對佈局。自定義ExpandableListView在頁眉中帶按鈕多次觸發其事件

在GetGroupView我定義了一個btn.Click委託其啓動一個新的活動:

 public override View GetGroupView(int groupPosition, bool isExpanded, View convertView, ViewGroup parent) 

    { 

     var view = convertView; 

     var group = this.groups[groupPosition]; 

     if (view == null) 

     { 

      var inflater = context.GetSystemService(Context.LayoutInflaterService) as LayoutInflater; 

      view = inflater.Inflate(Resource.Layout.ExpListViewItem, null); 

     } 

     view.FindViewById<TextView>(Resource.Id.expListViewItem_txt).Text = group.GetHeader(); 

     view.FindViewById<Button>(Resource.Id.expListViewItem_btn).Focusable = false; 

     view.FindViewById<Button>(Resource.Id.expListViewItem_btn).Click += (object sender, EventArgs e) => 

     { 

      var type = e.GetType(); 

      if(sender.GetType() == typeof(Button)) 

      { 

      Intent temp = new Intent(context,typeof(TestActivity)); 

      temp.PutExtra("TestValue", group.GetHeader()); 

      context.StartActivity(typeof(TestActivity)); 

      } 

     }; 

     return view; 

    } 

如果我在ChildItem點擊我要開始另一個活動:

public override View GetChildView(int groupPosition, int childPosition, bool isLastChild, View convertView, ViewGroup parent) 

    { 

     var view = convertView; 

     var group = this.groups[groupPosition]; 

     var item = group.GetItems()[childPosition]; 

     if (view == null) 

     { 

      var inflater = context.GetSystemService(Context.LayoutInflaterService) as LayoutInflater; 

      view = inflater.Inflate(Resource.Layout.expListViewChildren, null); 

     } 

     view.FindViewById<TextView>(Resource.Id.expListViewChildren_txt).Text = item.GetHeader(); 

     view.Click += delegate 

     { 

      Intent temp = new Intent(context, typeof(test)); 

      temp.PutExtra("TestValue", item.GetHeader()); 

      context.StartActivity(temp); 

     }; 



     return view; 
    } 

如果ListView控件是崩潰了,一切都很好,但如果它展開,Activity會啓動兩次(因爲btn.click委託被觸發兩次)。

我在這裏錯過了什麼?

感謝您的幫助!

回答

0

我遇到了非常相似的事情 - 確保您的委託沒有通過被調用兩次來聲明兩個實例。當列表視圖展開時,你是否再次調用委託聲明?

可能是有兩個處理程序在那裏,你需要找到每個並消除其中之一。

+0

記錄聲明呼叫 - 檢查您的日誌,看看發生了什麼。 –

+0

@ user1021605您是否從不同的地方創建此列表?這聽起來像是在多個環境下創建的。 –

+0

所以我再次檢查 - 下面我注意到: 如上所述,GetGroupView被稱爲所有組中總結的兒童金額。 迭代通過第一個視圖,視圖是空的並且膨脹。 迭代通過n + 1視圖視圖不是空值,不會被誇大,因此委託會被附加n + 1次。 由於我遍歷每個組多次,每個按鈕得到幾個代表附加 - 所以主要問題ist - 爲什麼地獄getgroupview稱爲每個孩子的總數? – user1021605