0

これが私のコードです:

arrow.setOnTouchListener(new View.OnTouchListener() {

    @Override
    public boolean onTouch(View v, MotionEvent event) {
        // TODO Auto-generated method stub

        String user = user_name.getText().toString();
        String pass = pass_word.getText().toString();

        String check = db.getPassword(user);

        if(check.equals(pass))
        {
            user_name.setVisibility(View.INVISIBLE);
            pass_word.setVisibility(View.INVISIBLE);
            arrow.setVisibility(View.INVISIBLE);

            pg.setVisibility(View.VISIBLE);

            for(int i=0;i<100000;i++)
            {
                pg.setVisibility(View.VISIBLE);
            }

            Intent openQr_code = new Intent ("com.cinamon.vampskin.MENU_ADMIN");
            startActivity(openQr_code);

        }
        else
        {
            user_name.setVisibility(View.INVISIBLE);
            pass_word.setVisibility(View.INVISIBLE);
            arrow.setVisibility(View.INVISIBLE);

            pg.setVisibility(View.VISIBLE);

            for(int j=0;j<100000;j++)
            {
                pg.setVisibility(View.VISIBLE);
            }

            Toast.makeText(getApplicationContext(), "Invalid username or password", Toast.LENGTH_SHORT).show();
            user_name.setVisibility(View.VISIBLE);
            pass_word.setVisibility(View.VISIBLE);
            arrow.setVisibility(View.VISIBLE);

            pg.setVisibility(View.INVISIBLE);

            noOfTimesLoginError++;

            if(noOfTimesLoginError == 3)
            {
                Toast.makeText(getApplicationContext(), "Try again in 10 seconds...", Toast.LENGTH_LONG).show();
                user_name.setVisibility(View.INVISIBLE);
                pass_word.setVisibility(View.INVISIBLE);
                arrow.setVisibility(View.INVISIBLE);

                pg.setVisibility(View.VISIBLE);
                time_text.setVisibility(View.VISIBLE);

                for(int time = 10 ; time>0 ; time--)
                {
                    for(int m = 0 ; m < 1000 ; m++)
                    {
                        time_text.setText("00 : 00 : "+time);
                    }
                }

                user_name.setVisibility(View.VISIBLE);
                pass_word.setVisibility(View.VISIBLE);
                arrow.setVisibility(View.VISIBLE);
                pg.setVisibility(View.INVISIBLE);
                time_text.setVisibility(View.INVISIBLE);
            }
        }
        return false;
    }
});

他の部分では、ユーザー名フィールド、パスワード フィールド、画像の矢印、および pg がプログレス バーであることを非表示にしたいので、これらを非表示にする必要があります。for ループの後は表示されるだけですが、このコードを実行すると、非表示が機能せず、常に表示されます。しかし、最初の if 部分では、コードに従って完全に機能します。

助けてください、事前にありがとう:)

4

2 に答える 2

0

その理由は、ビューをすぐに非表示にする必要があるためですが、この方法では機能しません。通常、ビューは次のレンダリング サイクルで非表示になりますが、システムにビューを再描画する機会を与えません。で忙しいです

            for(int time = 10 ; time>0 ; time--)
            {
                for(int m = 0 ; m < 1000 ; m++)
                {
                    time_text.setText("00 : 00 : "+time);
                }
            }

そして、可視性を元に戻しています

            user_name.setVisibility(View.VISIBLE);
            pass_word.setVisibility(View.VISIBLE);
            arrow.setVisibility(View.VISIBLE);

だからそれは目に見えるままです

于 2013-07-15T13:07:13.227 に答える
0

同じ問題があり、@Desert が言ったように、別のレンダリング サイクルで実行する必要があります。それを行うには、postDelay を使用してハンドラーを追加できます。これは私にとってはうまくいきました。

new Handler().postDelayed(new Runnable() {
                    @Override
                    public void run() {
                        // Turn view visible/invisible
                    }
                }, 500); // Change the time for as little as long it works
于 2019-05-01T10:44:50.530 に答える