我的toggleButton目前需要一个while循环,因为toggleButton是我的应用程序的重要部分,需要不断检查它,以便相应地反映我的EditText。我尝试了这个线程代码,但UI在运行时被锁定了。
我的线程代码是:
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.selectionmode2);
Thread whileLoop = new Thread(){
public void run(){
toggleButton.setOnCheckedChangeListener(new OnCheckedChangeListener()
{
@Override
public void onCheckedChanged(CompoundButton buttonView,
boolean isChecked) {
String row1TextContains = row1TextField.getText().toString().trim();
String row2TextContains = row2TextField.getText().toString().trim();
String row3TextContains = row3TextField.getText().toString().trim();
String row4TextContains = row4TextField.getText().toString().trim();
while(isChecked)
{
if(row1TextField.isFocused())
{
row2TextField.setEnabled(false);
row2TextField.setHint("Disabled");
//toggleButton.setChecked(true);
}else
{
row1TextField.setEnabled(true);
row2TextField.setEnabled(true);
row2TextField.setHint(row2Hint);
row3TextField.setEnabled(true);
row4TextField.setEnabled(true);
}
if(row2TextField.isFocused())
{
row3TextField.setEnabled(false);
row3TextField.setHint("Disabled");
toggleButton.setChecked(true);
}else
{
row3TextField.setHint(row3Hint);
row3TextField.setEnabled(true);
}
if(row3TextField.isFocused())
{
row4TextField.setEnabled(false);
row4TextField.setHint("Disabled");
if(row1TextContains.isEmpty() || row1TextContains.length() == 0 || row1TextContains.equals(""))
{
row2TextField.setEnabled(true);
}else
{
row2TextField.setEnabled(false);
row2TextField.setHint("Disabled");
}
}else{
row4TextField.setEnabled(true);
row4TextField.setHint(row4Hint);
}
if(row4TextField.isFocused())
{
Toast toast = Toast.makeText(getApplicationContext(), "Row 4 of Large Character is not allowed", Toast.LENGTH_LONG);
toast.setGravity(Gravity.CENTER, 0, 0);
toast.show();
row4TextField.setHint("Disabled");
row1TextField.requestFocus();
}
}
}
});
}
};
whileLoop.start();
我最初使用自定义方法和onFocusChange
来检查按钮状态并相应地更改我的EditText
。但我觉得,如果我使用带有while循环的线程不断检查我的按钮,它将更顺畅,并且会有更少的问题。
如何将自定义方法onRowFocus和onFocusChange与UI线程中的setCheckedOnChangedListener集成,以防止锁定?是可能还是全部多余?
private void checkRowFocus(View v){
String row1TextContains = row1TextField.getText().toString().trim();
String row2TextContains = row2TextField.getText().toString().trim();
String row3TextContains = row3TextField.getText().toString().trim();
String row4TextContains = row4TextField.getText().toString().trim();
if(v == row1TextField)
{
row2TextField.setEnabled(false);
row2TextField.setHint("Disabled");
//toggleButton.setChecked(true);
}else
{
row1TextField.setEnabled(true);
row2TextField.setEnabled(true);
row2TextField.setHint(row2Hint);
row3TextField.setEnabled(true);
row4TextField.setEnabled(true);
}
if(v == row2TextField)
{
row3TextField.setEnabled(false);
row3TextField.setHint("Disabled");
toggleButton.setChecked(true);
}else
{
row3TextField.setHint(row3Hint);
row3TextField.setEnabled(true);
}
if(v == row3TextField)
{
row4TextField.setEnabled(false);
row4TextField.setHint("Disabled");
if(row1TextContains.isEmpty() || row1TextContains.length() == 0 || row1TextContains.equals(""))
{
row2TextField.setEnabled(true);
}else
{
row2TextField.setEnabled(false);
row2TextField.setHint("Disabled");
}
}else{
row4TextField.setEnabled(true);
row4TextField.setHint(row4Hint);
}
if(v == row4TextField)
{
Toast toast = Toast.makeText(getApplicationContext(), "Row 4 of Large Character is not allowed", Toast.LENGTH_LONG);
toast.setGravity(Gravity.CENTER, 0, 0);
toast.show();
row4TextField.setHint("Disabled");
row1TextField.requestFocus();
}
}
@Override
public void onFocusChange(View v, boolean hasFocus) {
boolean statusOn = toggleButton.isChecked();
String row1TextContains = row1TextField.getText().toString().trim();
String row2TextContains = row2TextField.getText().toString().trim();
String row3TextContains = row3TextField.getText().toString().trim();
String row4TextContains = row4TextField.getText().toString().trim();
if(statusOn)
{
checkRowFocus(v);
}if(!statusOn)
{
row1TextField.setEnabled(true);
row1TextField.setHint(row1Hint);
if(row1TextContains.isEmpty() || row1TextContains.length() == 0 || row1TextContains.equals("")){
row2TextField.setEnabled(true);
row2TextField.setHint(row2Hint);
}else
{
row2TextField.setEnabled(false);
}
row3TextField.setEnabled(true);
row3TextField.setHint(row3Hint);
row4TextField.setEnabled(true);
row4TextField.setHint(row4Hint);
}
}