I am new to Android. I have a listview which contains checkbox in each list item. And I have a button under the listview. On button click event I have to capture all the list view items where checkbox is checked.
Here is my Adaptor code.
class ListAdapter : BaseAdapter<Package>
{
List<Package> routeSheet;
Activity activity;
public ListAdapter(Activity activity, List<Package> routeSheetRequests)
{
this.activity = activity;
this.routeSheet = routeSheetRequests;
}
public override Package this[int position]
{
get
{
return routeSheet[position];
}
}
public override Java.Lang.Object GetItem(int position)
{
return position;
}
public override long GetItemId(int position)
{
return position;
}
public override View GetView(int position, View convertView, ViewGroup parent)
{
var view = convertView;
if (view == null)
{
view = LayoutInflater.From(parent.Context).Inflate(Resource.Layout.CheckoutListRow,
parent, false);
var stopId = view.FindViewById<TextView>(Resource.Id.txtStopId);
var shipperName = view.FindViewById<TextView>(Resource.Id.txtShipperName);
var checkBoxMove = view.FindViewById<CheckBox>(Resource.Id.chkCheckout);
checkBoxMove.CheckedChange += CheckBoxMove_CheckedChange;
view.Tag = new ListAdapterViewHolder() { StopId = stopId, DeliveryCompany = shipperName,
CheckBox = checkBoxMove };
}
else
{
}
var holder = (ListAdapterViewHolder)view.Tag;
holder.StopId.Text = Convert.ToString(routeSheet[position].ControlNumber);
holder.DeliveryCompany.Text = Convert.ToString(routeSheet[position].DeliveryCompany);
return view;
}
private void CheckBox_CheckedChange(object sender, CompoundButton.CheckedChangeEventArgs e)
{
if (e.IsChecked)
{
// Here I want to get the list item details
}
}
public override int Count
{
get
{
if (routeSheet != null)
return routeSheet.Count();
else
return 0;
}
}
}
class ListAdapterViewHolder : Java.Lang.Object
{
public TextView DeliveryCompany { get; set; }
public TextView StopId { get; set; }
public CheckBox CheckBox { get; set; }
}
Here is my Fragment code.
public class CheckoutExcFragment : Android.Support.V4.App.Fragment
{
ListView ExcList;
private List<Package> routesheet = null;
public override void OnCreate(Bundle savedInstanceState)
{
base.OnCreate(savedInstanceState);
Package package;
routesheet = new List<Package>();
var Packages = Arguments.GetParcelableArrayList("PakageList");
if (Packages != null)
{
foreach (var pkg in Packages)
{
PackageParcelable parcelable = (PackageParcelable)pkg;
package = parcelable.Package;
routesheet.Add(package);
}
}
}
public override View OnCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState)
{
var view = inflater.Inflate(Resource.Layout.CheckoutExcFragment, container, false);
InitListView(view);
return view;
}
public override void OnAttach(Context context)
{
base.OnAttach(context);
}
private void InitListView(View view)
{
ExcList = (ListView)view.FindViewById(Resource.Id.lstCheckoutExc);
ExcList.ItemClick += ExcList_ItemClick;
var adapter = new ListAdapter(this.Activity, routesheet);
ExcList.Adapter = adapter;
}
private void ExcList_ItemClick(object sender, AdapterView.ItemClickEventArgs e)
{
Package package = routesheet[e.Position];
if (package !=null)
{
var json = Newtonsoft.Json.JsonConvert.SerializeObject(package);
Intent intent = new Intent(this.Activity, Java.Lang.Class.FromType(typeof(PackageInfo)));
intent.PutExtra("PackageDetails", json);
StartActivity(intent);
}
}
}
Main Activity code:
private void MoveSelectedClick_Click(object sender, EventArgs e)
{
try
{
// Here I want to get the checkbox selected list items
}
catch (Exception ex)
{
}
}
- I added checkbox checked event where I want to get the selected list item details and save in a holder.
- On button click event get the checked list items from the holder. I'm not sure whether this is the right approach.
My problem is I'm not able to get the checkbox selected list item details. I verified numerous articles but I couldn't find the answer. Please help. Thank you.