中文字幕精品亚洲无线码二区,国产黄a三级三级三级看三级,亚洲七七久久桃花影院,丰满少妇被猛烈进入,国产小视频在线观看网站

大(da)叔(shu)也說Xamarin~Android篇~ListView里的Click事件并(bing)獲取本(ben)行的其它元素(su)

回到目錄

我原創,我貢獻,我是倉儲大叔

本篇大叔原創,本著對技術的熱愛去研究它,把成果分享給國人!大叔始終相信一句話:你只有選擇一個感興趣的工作,你才能更好的發揮你的潛力,而這一切都建立在你不斷研究,不斷鉆研的前提下。

Xamarin文章(zhang)在(zai)網(wang)上(shang)比較少,而(er)ListView相關的信息(xi)更好(hao),有(you)限的那么(me)幾個(ge)還(huan)都(dou)說的不清楚,只是(shi)(shi)告訴大家(jia)如何(he)去(qu)完成(cheng)按鈕的事件,而(er)在(zai)事件里(li),如何(he)獲取當(dang)前(qian)行的其(qi)它元素信息(xi)則沒有(you)說明(ming),在(zai)網(wang)絡上(shang)找(zhao)了(le)很(hen)久,沒有(you)收獲,確(que)定還(huan)是(shi)(shi)自己去(qu)研究吧,幸運的是(shi)(shi),最(zui)終(zhong)還(huan)是(shi)(shi)找(zhao)了(le)解決的方法(fa)。

圖像簡單說下

先(xian)看(kan)一下截圖,一個(ge)ListView,它的布局是表(biao)格,每行(xing)(xing)由若(ruo)干個(ge)TextView組成,最后是兩個(ge)Button,我們在(zai)單擊(ji)每行(xing)(xing)按(an)鈕時(shi),需要拿到對應(ying)行(xing)(xing)上的其(qi)它元素的值

訪原生android失敗了

我們(men)在(zai)(zai)網上可以(yi)(yi)(yi)找到的(de)(de)是(shi)Android原(yuan)生環境對(dui)按(an)鈕的(de)(de)實(shi)現(xian)(xian)方(fang)法(fa),即它可以(yi)(yi)(yi)直接(jie)在(zai)(zai)new View.OnClickListener這(zhe)(zhe)個(ge)接(jie)口,并(bing)直接(jie)override Click這(zhe)(zhe)個(ge)方(fang)法(fa),我有時確實(shi)覺得java的(de)(de)語法(fa)怪怪的(de)(de),不成(cheng)體統(tong),感(gan)覺編(bian)譯器應該(gai)是(shi)為(wei)(wei)OnClickListener這(zhe)(zhe)個(ge)接(jie)口動(dong)態建立(li)了一(yi)個(ge)匿名(ming)類,然后由(you)它重寫Click方(fang)法(fa),畢竟,我們(men)認為(wei)(wei)接(jie)口是(shi)不能被(bei)實(shi)例化的(de)(de),呵呵;而在(zai)(zai)xamarin里,如何去重寫,也(ye)建立(li)一(yi)個(ge)類去繼(ji)(ji)承View.OnClickListener,說做就做,不過可惜的(de)(de)是(shi)在(zai)(zai)xamarin里并(bing)沒有一(yi)個(ge)OnClickListener的(de)(de)接(jie)口,因(yin)為(wei)(wei).net的(de)(de)命名(ming)規范(fan)的(de)(de)原(yuan)因(yin),把(ba)這(zhe)(zhe)個(ge)接(jie)口改(gai)名(ming)為(wei)(wei)OnClickListener,我直接(jie)繼(ji)(ji)承它,實(shi)現(xian)(xian)了Click方(fang)法(fa),不過可能的(de)(de)是(shi),ListView的(de)(de)click事件(jian)并(bing)沒有被(bei)相應,所(suo)以(yi)(yi)(yi),我的(de)(de)研究還在(zai)(zai)繼(ji)(ji)續...

 public class lvButtonListener : Android.Views.View.IOnClickListener
    {
        public void OnClick(View v)
        {
            v.FindViewById<TextView>(Resource.Id.hello).Text = "click";

            Toast.MakeText(v.Context, "View OnClick2", ToastLength.Short).Show();
        }

        public IntPtr Handle
        {
            get { return this.Handle; }
        }

        public void Dispose()
        {
            this.Dispose();
        }
    }

繼續找資料,按Adapter實現View.IOnClickListener,成功了

新建的類去實現IOnClickListener不(bu)(bu)成功,所以就在(zai)適配器上(shang)直接去實現它,這個代碼也是(shi)從網(wang)上(shang)找的(de),不(bu)(bu)過,所只(zhi)是(shi)說(shuo)了(le)一下(xia)按鈕的(de)處罰,簡單幾(ji)行代碼,沒有(you)說(shuo)明如何(he)獲取(qu)當前行里的(de)元素

    /// <summary>
    /// 適配器(qi)
    /// </summary>
    public class Task_InfoListAdapter : BaseAdapter<Task_Info>, Android.Views.View.IOnClickListener
    {
     //代(dai)碼 
    }

實現Click方法,寫你(ni)(ni)自己的(de)(de)(de)邏輯,其(qi)中參數View,表示當(dang)前按鈕所在的(de)(de)(de)View對象,它不包括其(qi)它行(xing)里的(de)(de)(de)元素(su),如TextView你(ni)(ni)在這個View對象上是無(wu)法找到的(de)(de)(de)

/// <summary>
        /// 單擊某個按鈕(niu)時的事件
        /// </summary>
        /// <param name="v">這個按妞</param>
        public void OnClick(View v)
        {
         switch (v.Id)
            {
                case Resource.Id.rechargeBtn:
                    Toast.MakeText(this.context, "充值" + v.Id, ToastLength.Short).Show();
                    this.context.StartActivity(typeof(RechargeActivity));
                    break;
                case Resource.Id.delBtn:
                    Toast.MakeText(this.context, "刪(shan)除(chu)",ToastLength.Short).Show();
                    break;
            }
        }

多嘗試,最終找到解決方法

上面的(de)代碼(ma)(ma)只是告訴我(wo)們你點(dian)擊的(de)是哪個(ge)按鈕(niu),而無法得(de)到當(dang)前按鈕(niu)所在行(xing)(xing)的(de)其它元素,這時我(wo)們使用V.FindViewById<TextView>(Resource.Id.TaskID).Text 這種代碼(ma)(ma)來獲取值是錯誤的(de),因為上面我(wo)已經說過,View這個(ge)對(dui)(dui)象指的(de)是當(dang)前的(de)Button對(dui)(dui)象,而并不(bu)是整個(ge)一行(xing)(xing),在進(jin)行(xing)(xing)觀察(cha)后(hou)(hou),發(fa)現View對(dui)(dui)象里有個(ge)Parent屬性,把(ba)它輸出后(hou)(hou)發(fa)現,它正是我(wo)們的(de)表格行(xing)(xing)對(dui)(dui)象,這時,我(wo)來精神了,看到希望了,繼(ji)續代碼(ma)(ma),list.FindViewById<TextView>(Resource.Id.TaskID).Text,經過測試發(fa)現成(cheng)功了,終于成(cheng)功了,不(bu)容易!

下面(mian)是適配器(qi)的完整(zheng)代碼

    /// <summary>
    /// 適配器
    /// </summary>
    public class Task_InfoListAdapter : BaseAdapter<Task_Info>, Android.Views.View.IOnClickListener
    {
        /// <summary>
        /// 所有(you)UserInof 的(de)數據
        /// </summary>
        List<Task_Info> items;

        Activity context;


        public Task_InfoListAdapter(Activity context, IEnumerable<Task_Info> items)
            : base()
        {
            this.context = context;
            this.items = items.ToList();
        }
        public override long GetItemId(int position)
        {
            return position;
        }
        public override Task_Info this[int position]
        {
            get { return items[position]; }
        }
        public override int Count
        {
            get { return items.Count; }
        }

        /// <summary>
        /// 系統會呼叫 并且(qie)render.
        /// </summary>
        /// <param name="position"></param>
        /// <param name="convertView"></param>
        /// <param name="parent"></param>
        /// <returns></returns>
        public override View GetView(int position, View convertView, ViewGroup parent)
        {
            var item = items[position];

            if (convertView == null)
            {
                //使用自(zi)訂的UserListItemLayout,這是一(yi)個模版,可(ke)以在外布遍歷它(ta)
                convertView = context.LayoutInflater.Inflate(Resource.Layout.PartialCurrentTaskList, null);
            }

            convertView.FindViewById<TextView>(Resource.Id.TaskID).Text = item.TaskID.ToString();
            convertView.FindViewById<TextView>(Resource.Id.ExpectedDate).Text = item.CreateDate.ToString();
            convertView.FindViewById<TextView>(Resource.Id.Status).Text = item.Status.ToString();
            //得到(dao)listview上的按鈕
            var btn = convertView.FindViewById<Button>(Resource.Id.rechargeBtn);
            var delBtn = convertView.FindViewById<Button>(Resource.Id.delBtn);

            //listView上按鈕的(de)單擊事(shi)件
            btn.SetOnClickListener(this);
            delBtn.SetOnClickListener(this);
            return convertView;
        }

        /// <summary>
        /// 單擊某個(ge)按鈕(niu)時的事件(jian)
        /// </summary>
        /// <param name="v">這個按妞</param>
        public void OnClick(View v)
        {
            //得到當前(qian)父對象
            var list = (v.Parent as View);
            //同級的(de)其(qi)它對(dui)象
            var taskId = list.FindViewById<TextView>(Resource.Id.TaskID).Text;
           
            switch (v.Id)
            {
                case Resource.Id.rechargeBtn:
                    Toast.MakeText(this.context, "充值(zhi)" + v.Id, ToastLength.Short).Show();
                    this.context.StartActivity(typeof(RechargeActivity));
                    break;
                case Resource.Id.delBtn:
                    Toast.MakeText(this.context, "刪除taskID:" + taskId.ToString(), ToastLength.Short).Show();
                    break;
            }
        }
    }

如果您覺得本文章對您有幫(bang)助,請幫(bang)頂一(yi)下!

研究在繼續...

回到目錄

posted @ 2016-01-08 09:21  張占嶺  閱讀(3401)  評論(4)    收藏  舉報