編輯:關於android開發
本篇大叔原創,本著對技術的熱愛去研究它,把成果分享給國人!大叔始終相信一句話:你只有選擇一個感興趣的工作,你才能更好的發揮你的潛力,而這一切都建立在你不斷研究,不斷鑽研的前提下。
Xamarin文章在網上比較少,而ListView相關的信息更好,有限的那麼幾個還都說的不清楚,只是告訴大家如何去完成按鈕的事件,而在事件裡,如何獲取當前行的其它元素信息則沒有說明,在網絡上找了很久,沒有收獲,確定還是自己去研究吧,幸運的是,最終還是找了解決的方法。
先看一下截圖,一個ListView,它的布局是表格,每行由若干個TextView組成,最後是兩個Button,我們在單擊每行按鈕時,需要拿到對應行上的其它元素的值
我們在網上可以找到的是Android原生環境對按鈕的實現方法,即它可以直接在new View.OnClickListener這個接口,並直接override Click這個方法,我有時確實覺得java的語法怪怪的,不成體統,感覺編譯器應該是為OnClickListener這個接口動態建立了一個匿名類,然後由它重寫Click方法,畢竟,我們認為接口是不能被實例化的,呵呵;而在xamarin裡,如何去重寫,也建立一個類去繼承View.OnClickListener,說做就做,不過可惜的是在xamarin裡並沒有一個OnClickListener的接口,因為.net的命名規范的原因,把這個接口改名為OnClickListener,我直接繼承它,實現了Click方法,不過可能的是,ListView的click事件並沒有被相應,所以,我的研究還在繼續...
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();
}
}
新建的類去實現IOnClickListener不成功,所以就在適配器上直接去實現它,這個代碼也是從網上找的,不過,所只是說了一下按鈕的處罰,簡單幾行代碼,沒有說明如何獲取當前行裡的元素
/// <summary>
/// 適配器
/// </summary>
public class Task_InfoListAdapter : BaseAdapter<Task_Info>, Android.Views.View.IOnClickListener
{
//代碼
}
實現Click方法,寫你自己的邏輯,其中參數View,表示當前按鈕所在的View對象,它不包括其它行裡的元素,如TextView你在這個View對象上是無法找到的
/// <summary>
/// 單擊某個按鈕時的事件
/// </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, "刪除",ToastLength.Short).Show();
break;
}
}
上面的代碼只是告訴我們你點擊的是哪個按鈕,而無法得到當前按鈕所在行的其它元素,這時我們使用V.FindViewById<TextView>(Resource.Id.TaskID).Text 這種代碼來獲取值是錯誤的,因為上面我已經說過,View這個對象指的是當前的Button對象,而並不是整個一行,在進行觀察後,發現View對象裡有個Parent屬性,把它輸出後發現,它正是我們的表格行對象,這時,我來精神了,看到希望了,繼續代碼,list.FindViewById<TextView>(Resource.Id.TaskID).Text,經過測試發現成功了,終於成功了,不容易!
下面是適配器的完整代碼
/// <summary>
/// 適配器
/// </summary>
public class Task_InfoListAdapter : BaseAdapter<Task_Info>, Android.Views.View.IOnClickListener
{
/// <summary>
/// 所有UserInof 的數據
/// </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>
/// 系統會呼叫 並且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)
{
//使用自訂的UserListItemLayout,這是一個模版,可以在外布遍歷它
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();
//得到listview上的按鈕
var btn = convertView.FindViewById<Button>(Resource.Id.rechargeBtn);
var delBtn = convertView.FindViewById<Button>(Resource.Id.delBtn);
//listView上按鈕的單擊事件
btn.SetOnClickListener(this);
delBtn.SetOnClickListener(this);
return convertView;
}
/// <summary>
/// 單擊某個按鈕時的事件
/// </summary>
/// <param name="v">這個按妞</param>
public void OnClick(View v)
{
//得到當前父對象
var list = (v.Parent as View);
//同級的其它對象
var taskId = list.FindViewById<TextView>(Resource.Id.TaskID).Text;
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, "刪除taskID:" + taskId.ToString(), ToastLength.Short).Show();
break;
}
}
}
如果您覺得本文章對您有幫助,請幫頂一下!
研究在繼續...
VS2015牆內創建ionic2,vs2015牆ionic2
VS2015牆內創建ionic2,vs2015牆ionic2 開始學習ionic2,試驗各種方法,感覺以下是緊跟rc版本的
Android學習指南之二:分析Android框架及Android程序的目錄結構
我們在使用某個系統進行開發時,有必要先大體了解下它的框架結構。Android開
Android進度條學習,android進度條
Android進度條學習,android進度條 自定義屬性 <!-- roundColor 圓環的顏色 roundProgressCol
Android中TextView添加刪除線,androidtextview
Android中TextView添加刪除線,androidtextview項目中的需求~~~~ 商城中物品的一個本身價格,還有一個就是優惠價格。。。需要用到一個刪除線。