Android 编辑列表中的文本。EditText.TextChanged在滚动条上给出了错误的值
我在每个列表上都有以下行布局:Android 编辑列表中的文本。EditText.TextChanged在滚动条上给出了错误的值,android,listview,xamarin.android,Android,Listview,Xamarin.android,我在每个列表上都有以下行布局: <?xml version="1.0" encoding="utf-8"?> <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" android:orientation="horizontal" android:layout_width="match
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:orientation="horizontal"
android:layout_width="match_parent"
android:layout_height="wrap_content">
<TextView
android:id="@+id/RawNumberTextView"
android:layout_marginLeft="@dimen/ButtonMargin"
android:layout_marginRight="@dimen/ButtonMargin"
android:text="@string/ColumnsStatistics_RawCount"
android:layout_width="wrap_content"
android:layout_height="wrap_content"/>
<EditText
android:id="@+id/RawBetEditText"
android:clickable="true"
android:focusable="true"
android:focusableInTouchMode="true"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_weight="1"
android:inputType="number"/>
<com.google.android.material.button.MaterialButton
style="@style/AppTheme.ButtonStyle"
android:id="@+id/MinusOneButton"
android:layout_marginLeft="@dimen/ButtonMargin"
android:layout_marginRight="@dimen/ButtonMargin"
android:elevation="@dimen/ButtonElevation"
android:text="-1"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
/>
<com.google.android.material.button.MaterialButton
style="@style/AppTheme.ButtonStyle"
android:id="@+id/PlusOneButton"
android:layout_marginRight="@dimen/ButtonMargin"
android:elevation="@dimen/ButtonElevation"
android:text="+1"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
/>
</LinearLayout>
您可以在加号或减号时再次设置编辑文本的
Data[pos]
值
将下面的代码添加到加号或减号按钮事件中
Data[pos] = betPerDrawEditText.Text;
整个代码:
MinusOneButton.Click += (sender, e) =>
{
pos = (int)MinusOneButton.Tag;
Data[pos] = betPerDrawEditText.Text;
int number = 0;
bool success = int.TryParse(Data[pos], out number);
if (success)
{
if (number > 0)
number--;
Data[pos] = number.ToString(CultureInfo.InvariantCulture);
betPerDrawEditText.Text = number.ToString(CultureInfo.InvariantCulture);
}
else
{
Data[pos] = number.ToString(CultureInfo.InvariantCulture);
betPerDrawEditText.Text = number.ToString(CultureInfo.InvariantCulture);
}
};
PlusOneButton.Click += (sender, e) =>
{
pos = (int)PlusOneButton.Tag;
int number = 1;
Data[pos] = betPerDrawEditText.Text;
bool success = int.TryParse(Data[pos], out number);
if (success)
{
number++;
betPerDrawEditText.Text = number.ToString(CultureInfo.InvariantCulture);
Data[pos] = number.ToString(CultureInfo.InvariantCulture);
}
else
{
betPerDrawEditText.Text = number.ToString(CultureInfo.InvariantCulture);
Data[pos] = number.ToString(CultureInfo.InvariantCulture);
}
};
截图:
您好,谢谢您的回答,我也用一个代码编辑了这个问题,这个代码也可以使用,但是有东西告诉我,它被多次无缘无故地访问,而您的想法更好,您认为呢?在我给出答复之前,我尝试了
TextChanged
。它访问了很多次。我提供的方法运行良好,没有错误。因此,我提供了在加号或减号之前设置数据[pos]
的方法。虽然您的代码在按钮上运行良好,但如果我从键盘上更改整数并向下滚动,则不会存储输入,因此我还添加了以下代码:betPerDrawEditText.TextChanged+=(object sender,Android.Text.TextChangedEventArgs e)=>{int number=0;if((int)betperpaudedittext.Tag==position){bool success=int.TryParse(e.Text.ToString(),out number);if(success)Data[position]=number.ToString();};如果此回复对您有帮助,您可以接受作为答案。如果您在更改键盘上的整数并向下滚动时遇到问题,请发布带有代码和错误的新问题。在您的代码中,您没有关于EditText的任何信息。TextChanged,当输入来自键盘时,您如何保存更改的内容?您的代码仅显示减号+按钮的内容ns有
private void AddMoney()
{
var layout = LayoutInflater.Inflate(Resource.Layout.ListViewMoneyPerDraw, null);
var listviewTitle = layout.FindViewById<TextView>(Resource.Id.ListViewTitleTextView);
var list = layout.FindViewById<ListView>(Resource.Id.BetPerDrawListView);
var moneyPerDrawDialogBuilder = new AlertDialog.Builder(Activity);
var listOptions = new List<string>();
listOptions.Add("1");
listOptions.Add("2");
listOptions.Add("3");
listOptions.Add("4");
listOptions.Add("1");
listOptions.Add("2");
listOptions.Add("3");
listOptions.Add("4");
listOptions.Add("1");
listOptions.Add("2");
listOptions.Add("3");
listOptions.Add("4");
listOptions.Add("1");
listOptions.Add("2");
listOptions.Add("3");
listOptions.Add("4");
list.Adapter = new MoneyPerDrawAdapter(Activity, listOptions);
list.ItemsCanFocus = true;
moneyPerDrawDialogBuilder.SetTitle(GetString(Resource.String.NumbersSearch_NumberSelectionAlertDialogTitle));
moneyPerDrawDialogBuilder.SetIcon(Resource.Mipmap.ic_launcher);
moneyPerDrawDialogBuilder.SetView(layout);
moneyPerDrawDialogBuilder.SetCancelable(false);
moneyPerDrawDialogBuilder.SetPositiveButton(GetString(Android.Resource.String.Ok), (s, ex) => { });
moneyPerDrawDialogBuilder.SetNegativeButton(GetString(Android.Resource.String.Cancel), (s, ex) => { });
var moneyPerDrawDAlertDialog = moneyPerDrawDialogBuilder.Show();
moneyPerDrawDAlertDialog.Window.ClearFlags(WindowManagerFlags.NotFocusable | WindowManagerFlags.AltFocusableIm);
}
if (view != null)
{
betPerDrawEditText.TextChanged += (object sender, Android.Text.TextChangedEventArgs e) =>
{
int number = 0;
if ((int)betPerDrawEditText.Tag == position)
{
bool success = int.TryParse(e.Text.ToString(), out number);
if (success)
Data[position] = number.ToString();
}
};
}
Data[pos] = betPerDrawEditText.Text;
MinusOneButton.Click += (sender, e) =>
{
pos = (int)MinusOneButton.Tag;
Data[pos] = betPerDrawEditText.Text;
int number = 0;
bool success = int.TryParse(Data[pos], out number);
if (success)
{
if (number > 0)
number--;
Data[pos] = number.ToString(CultureInfo.InvariantCulture);
betPerDrawEditText.Text = number.ToString(CultureInfo.InvariantCulture);
}
else
{
Data[pos] = number.ToString(CultureInfo.InvariantCulture);
betPerDrawEditText.Text = number.ToString(CultureInfo.InvariantCulture);
}
};
PlusOneButton.Click += (sender, e) =>
{
pos = (int)PlusOneButton.Tag;
int number = 1;
Data[pos] = betPerDrawEditText.Text;
bool success = int.TryParse(Data[pos], out number);
if (success)
{
number++;
betPerDrawEditText.Text = number.ToString(CultureInfo.InvariantCulture);
Data[pos] = number.ToString(CultureInfo.InvariantCulture);
}
else
{
betPerDrawEditText.Text = number.ToString(CultureInfo.InvariantCulture);
Data[pos] = number.ToString(CultureInfo.InvariantCulture);
}
};