Я попытался захватить текст из Cardview и поместить его в строку, это не сработает, так как текст может отличаться в зависимости от вида карты, из которого установлен флажок.
Я мог бы получить текст карты, как показано ниже. Он работает хорошо, когда флажок установлен и текст изменен.
1. Получите текст в соответствии с идентификатором ваших TextViews
var str = textView.Text;
В предоставленном вами коде не показано, как изменитьтекст, я использую код ниже, чтобы проверить. Текстовое представление находится в cardSugar Cardview.
var textView = FindViewById<TextView>(Resource.Id.textView);
var checkToppingSugar = FindViewById<CheckBox>(Resource.Id.checkToppingSugar);
checkToppingSugar.Click += (o, e) =>
{
if (checkToppingSugar.Checked)
{
Toast.MakeText(this, "Selected", ToastLength.Short).Show();
textView.Text = "textView Topping Selected";
}
else
{
Toast.MakeText(this, "Not selected", ToastLength.Short).Show();
textView.Text = "textView Topping Not selected";
}
};
2.Получить текст через foreach для всех элементов в линейном макете. Он должен соответствовать макету, который вы определили. Вы можете обратиться к макету в моем проекте . Я вывожу результаты в окно вывода.
var linearLayout = FindViewById<LinearLayout>(Resource.Id.linearlayout_view);
for (int i = 0; i < linearLayout.ChildCount; i++)
{
View child = linearLayout.GetChildAt(i);
if (child.GetType() == typeof(CardView))
{
var viewGroup = ((ViewGroup)child).GetChildAt(0);
for (int j = 0; j < ((ViewGroup)viewGroup).ChildCount; j++)
{
var viewGroup2 = ((ViewGroup)viewGroup).GetChildAt(j);
if (viewGroup2.GetType() == typeof(TextView))
{
System.Diagnostics.Debug.WriteLine(viewGroup2.GetType().ToString() + ": " + ((TextView)viewGroup2).Text);
}
}
}
}
Когда нажата кнопка заказа, я хочу, чтобы код метода BtnOrder_Click мог сказать, с какой карты (т. Е. Sugar, Chocolate Spread) топпинг /был отмечен флажок заполнения.
Я предлагаю вам установить флажок внутри Cardview, чтобы мы могли соединить их оба. Вы можете получить представление о карте, если отметите флажок, как показано ниже.
for (int i = 0; i < linearLayout.ChildCount; i++)
{
View child = linearLayout.GetChildAt(i);
if (child.GetType() == typeof(CardView))
{
var viewGroup = ((ViewGroup)child).GetChildAt(0);
for (int j = 0; j < ((ViewGroup)viewGroup).ChildCount; j++)
{
var viewGroup2 = ((ViewGroup)viewGroup).GetChildAt(j);
if (viewGroup2.GetType() == typeof(CheckBox))
{
if (((CheckBox)viewGroup2).Checked)
{
System.Diagnostics.Debug.WriteLine(((CardView)child));
}
}
}
}
}
Результат: в прошлый раз, Carduger выводил дважды, потому что я отмечаю оба флажка (Topping и Filling) carduger.
Вы можете загрузить их из папки Cardview / AndroidDemo на GitHub для справки. https://github.com/WendyZang/Test.git