簡體   English   中英

如何在 xamarin android 中獲取選定的動態復選框

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM