我有两个编辑文本,它们都链接到各自的图像按钮。当我单击按钮并使用来自编辑文本的输入时,它只工作一次,我第二次按它。基本上,我有一个很大的值,我在编辑文本中输入的任何数字一旦按下按钮,就会从大值中减去。
我有另一个按钮在相同的活动,带您到设置活动,但其中一个非常好的工作,我不知道为什么这两个按钮需要双击。
XML代码:
<ImageButton
android:id="@+id/plusCal"
android:layout_width="38dp"
android:layout_height="32dp"
android:layout_marginStart="120dp"
android:layout_marginBottom="124dp"
android:background="@color/white"
app:layout_constraintBottom_toBottomOf="parent"
app:layout_constraintStart_toStartOf="parent"
app:srcCompat="@drawable/plus" />活动代码:
公共类MainActivity扩展AppCompatActivity {
//create private ImageButton Object
private ImageButton setting_button;
TextView Cremaining, Premaining;
EditText MinusCal, MinusPro;
ImageButton plusCal, plusPro;
String calData, proData;
SharedPreferences prefs;
int calint, proint, Calinput, ProInput;
String Result;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
prefs = PreferenceManager.getDefaultSharedPreferences(this);
calData = prefs.getString("Cal_Total","0");
proData = prefs.getString("Pro_Total","0");
//retrieve TxtView using findviewbyID
Cremaining = (TextView) findViewById(R.id.RemainingCal);
Premaining = (TextView) findViewById(R.id.RemainingPro);
//Retrieve EditButton using findviewbyID
MinusCal = (EditText)findViewById(R.id.EditCal) ;
MinusPro = (EditText)findViewById(R.id.EditPro);
//Retrieve Button using findViewbyID
plusCal = (ImageButton)findViewById(R.id.plusCal);
plusPro = (ImageButton)findViewById(R.id.plusProtein);
//Set Protein and Calories either from settings or update from result
Cremaining.setText(calData);
Premaining.setText(proData);
plusCal.setOnClickListener(new View.OnClickListener(){
@Override
public void onClick(View v) {
SharedPreferences.Editor editor = prefs.edit();
//Subtract Calories from Input calories, then set total to calData and save and set text
Calinput = Integer.parseInt(MinusCal.getText().toString());
calint = Integer.parseInt(calData);
calint -= Calinput;
calData = String.valueOf(calint);
editor.putString("Cal_Total", calData);
calData = prefs.getString("Cal_Total","0");
Cremaining.setText(calData);
editor.apply();
}
});忽略格式化和冗余变量,我的目标是清理代码一旦我有问题的工作,同样适用于任何错误处理(尝试捕获)
UPDATE:我猜到了:编辑器,我使用的是.apply()而不是commit,我在执行调用时使用它很晚,所以我设置了值,将它保存为共享首选项,然后在没有正确流的情况下回忆共享的首选项,这导致它也恢复了原来的值。
发布于 2020-04-06 04:04:24
编辑editText时,该视图具有焦点。因此,第一个点击将使它失去焦点(编辑插入符号将消失),第二个点击可以转到按钮或任何其他视图。
您可以执行editText.setOnFocusChangeListener,然后如果focus == false可以运行您想要的操作。
或者您可以执行editText.addTextChangedListener()并重写所需的方法。您可以在其中触发您想要的操作,并且当用户输入一个值时,您可以自动进行计算。在这种情况下不需要按钮。
或者,您可以使用editText.setOnKeyListener()和重写onKey(),并检测回车键何时被点击,执行如下操作:
if ((keyevent.getAction() == KeyEvent.ACTION_DOWN) && (keyCode == KeyEvent.KEYCODE_ENTER))
{
//perform the action you want
}https://stackoverflow.com/questions/61052476
复制相似问题