[英]How to get selected dynamic checkbox in xamarin android
這是我的代碼,如何從此代碼中選擇復選框。
1st..我從sqlite獲取文件名並將其循環到動態復選框。
private void DisplayData()
{
fileList = GeneralFunc.GetAllFile();
var checkBoxes = new CheckBox[0];
for (int i = 0; i < fileList.Count(); i++)
{
var checkBox = new CheckBox(this);
checkBox.Text = fileList[i].ST_filename;
checkBox.Id = i;
checkBox.LayoutParameters = new ViewGroup.LayoutParams(LinearLayout.LayoutParams.WrapContent, LinearLayout.LayoutParams.WrapContent);
linearLayoutClear.AddView(checkBox);
Array.Resize(ref checkBoxes, i + 1);
checkBoxes[i] = checkBox;
}
}
private class CheckedChangeListener : Java.Lang.Object, CompoundButton.IOnCheckedChangeListener //checkedChangeListener
{
private Activity activity;
public CheckedChangeListener(Activity activity)
{
this.activity = activity;
}
public void OnCheckedChanged(CompoundButton buttonView, bool isChecked) //check checked checkbox
{
string test = buttonView.Id.ToString();
string checkedName = null;
List<string> selectedFileList = new List<string>();
if (isChecked)
{
checkedName = buttonView.Text;
selectedFileList.Add(checkedName); //get selected checkbox put in list
}
else
{
selectedFileList.Remove(checkedName);
}
}
}
請幫助我。 我這樣的代碼..請幫助我。 嘗試選中復選框並放入列表。
Xamarin 中的復選框有一個名為 Checked 的屬性。 沒有與在 Java 中一樣將其設置為已檢查或檢查是否已檢查的相同方法。
// Reverse checked
if (checkbox.Checked)
{
checkbox.Checked = false;
}
else
{
checkbox.Checked = true;
}
您還可以遍歷復選框:
var checkboxList = new List<CheckBox>();
//Create new instance of checkbox
//var checkbox = new CheckBox();
checkboxList.Add(checkbox);
//Loop
foreach (var checkbox in checkboxList)
{
checkbox.Checked = true;
}
編輯
根據評論中的問題:
我用的怎么樣 checkBoxes[i].CheckedChange += CheckedControl;
private void CheckedControl(object sender, EventArgs e) { //在這里做事 }
然后,您將檢查sender
是否為復選框:
protected void CheckedControl(object sender, EventArgs e)
{
if (sender is CheckBox)
{
var checkbox = (CheckBox)sender;
if (checkbox.Checked)
{
// It is checked
}
//Change the checked status
checkbox.Checked = true;
}
}
編輯 2
我的代碼可以這樣嗎?
public void OnCheckedChanged(CompoundButton buttonView, bool isChecked) { string test = buttonView.Id.ToString(); List<string> selectedFileList = new List<string>(); if (isChecked) { string checkedName = buttonView.Text; selectedFileList.Add(checkedName); } }
您可以將CheckedChange
添加到CheckedControl
並從內部調用OnCheckedChanged
:
protected void CheckedControl(object sender, EventArgs e)
{
if (sender is CheckBox)
{
var checkbox = (CheckBox)sender;
OnCheckedChanged(checkbox);
}
}
然后在你的OnCheckedChanged
你有List<string> selectedFileList
- 我會把它從方法中移到類private List<string> selectedFileList
您的方法最終將如下所示:
public void OnCheckedChanged(CheckBox checkbox)
{
if (selectedFileList == null)
{
selectedFileList = new List<string>();
}
string test = checkbox.Id.ToString();
string checkedName = checkbox.Text;
if (checkbox.Checked)
{
selectedFileList.Add(checkedName);
}
else
{
selectedFileList.Remove(checkedName);
}
}
工作代碼
using Android.App;
using Android.OS;
using Android.Views;
using Android.Widget;
using System.Collections.Generic;
namespace App1
{
[Activity(MainLauncher = true)]
public class MainActivity : Activity
{
private LinearLayout linearLayoutClear;
//private CheckBox[] checkBoxes;
private List<string> selectedFileList;
protected override void OnCreate(Bundle savedInstanceState)
{
base.OnCreate(savedInstanceState);
SetContentView(Resource.Layout.activity_main);
linearLayoutClear = FindViewById<LinearLayout>(Resource.Id.linearLayoutClear);
DisplayData();
btnGetAllChecked = FindViewById<Button>(Resource.Id.btnGetAllChecked);
btnGetAllChecked.Click += (s, e) =>
{
if(selectedFileList != null)
{
Android.Util.Log.Debug("App.MainActivity", "AllChecked: " + string.Join(", ", selectedFileList));
}
};
}
private void DisplayData()
{
var fileList = GeneralFunc.GetAllFile();
//checkBoxes = new CheckBox[0];
for (int i = 0; i < fileList.Count(); i++)
{
var checkBox = new CheckBox(this);
checkBox.Text = fileList[i].ST_filename;
checkBox.Id = i;
checkBox.LayoutParameters = new ViewGroup.LayoutParams(LinearLayout.LayoutParams.WrapContent, LinearLayout.LayoutParams.WrapContent);
checkBox.CheckedChange += CheckBox_CheckedChange;
//Array.Resize(ref checkBoxes, i + 1);
//checkBoxes[i] = checkBox;
linearLayoutClear.AddView(checkBox);
}
}
private void CheckBox_CheckedChange(object sender, CompoundButton.CheckedChangeEventArgs e)
{
if (sender is CheckBox)
{
var checkbox = (CheckBox)sender;
string test = checkbox.Id.ToString();
string checkedName = checkbox.Text;
if (selectedFileList == null)
{
selectedFileList = new List<string>();
}
if (checkbox.Checked)
{
selectedFileList.Add(checkedName); //get selected checkbox put in list
}
else
{
selectedFileList.Remove(checkedName); //checkbox is not checked anymore so remove it from the list
}
}
}
}
}
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.