2017-08-26 86 views

回答

0

任何人都可以告訴如何實現RecyclerView上下文動作欄上的ListItem選擇上的長龍的android xamarin?

Xamarin Official RecyclerViewer例如,你可以按照下面的步驟來實現對recyclerview上下文操作欄:

  1. 爲你的動作條創建一個簡單的菜單資源(Resource/menu/ContextualMenu):

    <?xml version="1.0" encoding="utf-8" ?> 
    <menu xmlns:android="http://schemas.android.com/apk/res/android"> 
        <item android:id="@+id/itemOneId" 
        android:title="Item One"/> 
        <item android:id="@+id/itemTwoId" 
        android:title="Item Two" /> 
    </menu> 
    
  2. 創建班級(MyActionMode)器具ActionMode.ICallBack

    public class MyActionMode : Java.Lang.Object, ActionMode.ICallback 
    { 
        private Context mContext; 
        public MyActionMode(Context context) 
        { 
         mContext = context; 
        } 
    
        public bool OnActionItemClicked(ActionMode mode, IMenuItem item) 
        { 
         switch (item.ItemId) 
         { 
          case Resource.Id.itemOneId: 
           // do whatever you want 
           return true; 
          case Resource.Id.itemTwoId: 
           // do whatever you want 
           return true; 
          default: 
           return false; 
         } 
        } 
    
        public bool OnCreateActionMode(ActionMode mode, IMenu menu) 
        { 
         mode.MenuInflater.Inflate(Resource.Menu.ContextualMenu, menu); 
         return true; 
        } 
    
        public void OnDestroyActionMode(ActionMode mode) 
        { 
         mode.Dispose(); 
        } 
    
        public bool OnPrepareActionMode(ActionMode mode, IMenu menu) 
        { 
         return false; 
        } 
    } 
    
  3. PhotoViewHolder修改構造函數接受長按操作:

    public PhotoViewHolder (View itemView, Action<int> listener,Action<object,View.LongClickEventArgs> longClickListener) 
        : base (itemView) 
    { 
        // Locate and cache view references: 
        Image = itemView.FindViewById<ImageView> (Resource.Id.imageView); 
        Caption = itemView.FindViewById<TextView> (Resource.Id.textView); 
    
        // Detect user clicks on the item view and report which item 
        // was clicked (by position) to the listener: 
        itemView.Click += (sender, e) => listener (base.Position); 
        ItemView.LongClick +=(sender,e)=> longClickListener(sender,e); 
    } 
    
  4. 修改PhotoAlbumAdapter這樣的:

    public class PhotoAlbumAdapter : RecyclerView.Adapter 
    { 
        ... 
        // add this variable 
        private Activity mActivity; 
    
        // 
        private MyActionMode mActionMode; 
    
        ... 
        // add this constructor 
        public PhotoAlbumAdapter(PhotoAlbum photoAlbum, Activity activity) 
        { 
         mPhotoAlbum = photoAlbum; 
         mActivity = activity; 
        } 
    
    
        //add this function 
        void OnLongClick(object sender, View.LongClickEventArgs args) 
        { 
         mActionMode = new MyActionMode(mActivity); 
         mActivity.StartActionMode(mActionMode); 
         ((View)sender).Selected = true; 
         return; 
        } 
        ... 
    } 
    
  5. MainActivity變化PhotoAlbumAdapter創建以使用新創建構造函數:

    mAdapter = new PhotoAlbumAdapter (mPhotoAlbum,this); 
    

這裏是complete modified demo

+0

非常感謝您的詳細解釋,您的答案解決了我的問題,並非常感謝您回覆@正確的時間:) – Divya

+0

夏你能告訴我如何從上下文按鈕動作中刪除recyclerview列表項嗎? – Divya

+0

你可以打開另一個關於這個的問題,以便每個人都可以通過谷歌找到它。 –