使用带有ToggleButton和onFocusChange的Thread

时间:2014-08-11 14:25:39

标签: java android multithreading

我的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);
        }
    }

0 个答案:

没有答案