2016-11-05 58 views
0

我向ViewCell的根佈局添加了自定義的LongPressGestureRecognizer以處理某些情況,但添加之後,我發現在Android上點擊ViewCell時的連鎖效應消失了。我試圖通過獲取本地視圖,設置背景繪製使用下面的代碼將TapGestureRecognizer添加到ViewCell後紋波效應消失

  int[] attrs = { Android.Resource.Attribute.SelectableItemBackground }; 

      var ta = CrossCurrentActivity.Current.Activity.ObtainStyledAttributes(attrs); 

      var drawable = ta.GetDrawable(0); 
      nativeView.SetBackgroundDrawable(drawable); 
      ta.Recycle(); 

即使這不起作用加回動畫Android.Resource.Attribute.SelectableItemBackground。任何其他方式使其工作?

回答

0

對於那些想知道的人,我放棄了實現目標的自定義長按手勢識別方式,因爲這是做錯事情的錯誤方式。在Android上,我們應該使用ItemLongClick事件。以下是我所做的,首先,通過某種方法找出原生ListView,我的方法是首先獲取ListView的渲染器,然後獲取底層ListView。另一種方法是使用下面的代碼找到ListView,但這種方式需要,如果你有多個ListView

public static List<T> FindViews<T>(this ViewGroup viewGroup) where T : View 
    { 
     var result = new List<T>(); 

     var count = viewGroup.ChildCount; 
     for (int i = 0; i < count; i++) 
     { 
      var child = viewGroup.GetChildAt(i); 
      var item = child as T; 
      if (item != null) 
      { 
       result.Add(item); 
      } 
      else if (child is ViewGroup) 
      { 
       var innerResult = FindViews<T>(child as ViewGroup); 
       if (innerResult != null) 
       { 
        result.AddRange(innerResult); 
       } 
      } 
     } 
     return result; 
    } 
    var rootView =(ViewGroup)CurrentActivity.Window.DecorView.RootView 
    var nativeListView = rootView.FindView<Android.Widget.ListView>(); 

然後覆蓋PageOnAppearing方法更多的工作,在裏面,附加ItemLongClick事件處理程序。同時覆蓋OnDisappearing方法,在其中,分離ItemLongClick事件處理程序。這個很重要。只需在構造函數中添加ItemLongClick事件處理程序似乎不起作用。