软键盘打开时,单击按钮会导致崩溃

时间:2018-09-30 14:28:30

标签: android android-studio android-softkeyboard

我对softKeyboard有一个很奇怪的问题

无论softKeyboard事件中是否存在任何代码,当button打开并且我单击textViewon click应用程序崩溃时,

softkeyboard关闭时没有这种问题。

在与此完全相同的另一个活动中,没有这样的问题。

这是我点击时的logcat

2018-09-30 17:56:37.989 22151-22151/app.ufarm.ir.ufarm D/ViewRootImpl@dd08953[VerifyActivity]: ViewPostImeInputStage processPointer 0
2018-09-30 17:56:38.068 22151-22151/app.ufarm.ir.ufarm D/ViewRootImpl@dd08953[VerifyActivity]: ViewPostImeInputStage processPointer 1
2018-09-30 17:56:38.099 22151-22151/app.ufarm.ir.ufarm D/ViewRootImpl@dd08953[VerifyActivity]: MSG_WINDOW_FOCUS_CHANGED 0
2018-09-30 17:56:38.134 22151-22151/app.ufarm.ir.ufarm D/TextView: setTypeface with style : 0
2018-09-30 17:56:38.137 22151-22151/app.ufarm.ir.ufarm D/TextView: setTypeface with style : 0
2018-09-30 17:56:38.139 22151-22151/app.ufarm.ir.ufarm D/TextView: setTypeface with style : 0
2018-09-30 17:56:38.147 22151-22151/app.ufarm.ir.ufarm D/ViewRootImpl@2541e5[LoginActivity]: ThreadedRenderer.create() translucent=true
2018-09-30 17:56:38.150 22151-22151/app.ufarm.ir.ufarm D/InputTransport: Input channel constructed: fd=62
2018-09-30 17:56:38.150 22151-22151/app.ufarm.ir.ufarm D/ViewRootImpl@2541e5[LoginActivity]: setView = DecorView@60f04ba[LoginActivity] touchMode=true
2018-09-30 17:56:38.155 22151-22151/app.ufarm.ir.ufarm D/ViewRootImpl@2541e5[LoginActivity]: dispatchAttachedToWindow
2018-09-30 17:56:38.172 22151-22151/app.ufarm.ir.ufarm D/ViewRootImpl@2541e5[LoginActivity]: Relayout returned: oldFrame=[0,0][0,0] newFrame=[0,0][720,1280] result=0x27 surface={isValid=true -1028659200} surfaceGenerationChanged=true
2018-09-30 17:56:38.173 22151-22151/app.ufarm.ir.ufarm D/ViewRootImpl@2541e5[LoginActivity]: mHardwareRenderer.initialize() mSurface={isValid=true -1028659200} hwInitialized=true
2018-09-30 17:56:38.173 22151-22261/app.ufarm.ir.ufarm D/mali_winsys: EGLint new_window_surface(egl_winsys_display*, void*, EGLSurface, EGLConfig, egl_winsys_surface**, egl_color_buffer_format*, EGLBoolean) returns 0x3000,  [720x1280]-format:1
2018-09-30 17:56:38.191 22151-22151/app.ufarm.ir.ufarm D/ViewRootImpl@2541e5[LoginActivity]: MSG_RESIZED_REPORT: frame=Rect(0, 0 - 720, 1280) ci=Rect(0, 48 - 0, 0) vi=Rect(0, 48 - 0, 0) or=1
2018-09-30 17:56:38.191 22151-22151/app.ufarm.ir.ufarm D/ViewRootImpl@2541e5[LoginActivity]: MSG_WINDOW_FOCUS_CHANGED 1
2018-09-30 17:56:38.192 22151-22151/app.ufarm.ir.ufarm D/ViewRootImpl@2541e5[LoginActivity]: mHardwareRenderer.initializeIfNeeded()#2 mSurface={isValid=true -1028659200}
2018-09-30 17:56:38.192 22151-22151/app.ufarm.ir.ufarm V/InputMethodManager: mNextServedView is change
2018-09-30 17:56:38.197 22151-22151/app.ufarm.ir.ufarm V/InputMethodManager: Starting input: tba=android.view.inputmethod.EditorInfo@cf84ae0 nm : app.ufarm.ir.ufarm ic=com.android.internal.widget.EditableInputConnection@5c85199
2018-09-30 17:56:38.198 22151-22151/app.ufarm.ir.ufarm I/InputMethodManager: [IMM] startInputInner - mService.startInputOrWindowGainedFocus
2018-09-30 17:56:38.201 22151-22151/app.ufarm.ir.ufarm D/InputTransport: Input channel constructed: fd=86
2018-09-30 17:56:38.201 22151-22151/app.ufarm.ir.ufarm D/InputTransport: Input channel destroyed: fd=94
2018-09-30 17:56:38.211 22151-22151/app.ufarm.ir.ufarm D/ViewRootImpl@2541e5[LoginActivity]: MSG_RESIZED: frame=Rect(0, 0 - 720, 1280) ci=Rect(0, 48 - 0, 500) vi=Rect(0, 48 - 0, 500) or=1
2018-09-30 17:56:38.211 22151-22151/app.ufarm.ir.ufarm W/IInputConnectionWrapper: finishComposingText on inactive InputConnection
2018-09-30 17:56:38.211 22151-22151/app.ufarm.ir.ufarm W/IInputConnectionWrapper: performPrivateCommand on inactive InputConnection
2018-09-30 17:56:38.211 22151-22151/app.ufarm.ir.ufarm W/IInputConnectionWrapper: finishComposingText on inactive InputConnection
2018-09-30 17:56:38.222 22151-22151/app.ufarm.ir.ufarm D/ViewRootImpl@dd08953[VerifyActivity]: mHardwareRenderer.destroy()#1
2018-09-30 17:56:38.228 22151-22151/app.ufarm.ir.ufarm D/ViewRootImpl@dd08953[VerifyActivity]: Relayout returned: oldFrame=[0,0][720,1280] newFrame=[0,0][720,1280] result=0x5 surface={isValid=false 0} surfaceGenerationChanged=true
2018-09-30 17:56:38.237 22151-22151/app.ufarm.ir.ufarm D/ViewRootImpl@2541e5[LoginActivity]: Relayout returned: oldFrame=[0,0][720,1280] newFrame=[0,0][720,1280] result=0x1 surface={isValid=true -1028659200} surfaceGenerationChanged=false
2018-09-30 17:56:38.241 22151-22151/app.ufarm.ir.ufarm D/ViewRootImpl@1009443[HomeActivity]: MSG_RESIZED: frame=Rect(0, 0 - 720, 1280) ci=Rect(0, 48 - 0, 0) vi=Rect(0, 48 - 0, 0) or=1
2018-09-30 17:56:38.249 22151-22151/app.ufarm.ir.ufarm D/ViewRootImpl@1009443[HomeActivity]: Relayout returned: oldFrame=[0,0][720,1280] newFrame=[0,0][720,1280] result=0x1 surface={isValid=true -982102016} surfaceGenerationChanged=false
2018-09-30 17:56:38.616 22151-22151/app.ufarm.ir.ufarm D/TextView: SYANI: Clipboard API is calling: clearFilter()
2018-09-30 17:56:38.616 22151-22151/app.ufarm.ir.ufarm D/TextView: SYANI: Clipboard API is calling: unregisterClipboardEventListener()
2018-09-30 17:56:38.619 22151-22151/app.ufarm.ir.ufarm D/ViewRootImpl@dd08953[VerifyActivity]: mHardwareRenderer.destroy()#4
2018-09-30 17:56:38.619 22151-22151/app.ufarm.ir.ufarm D/ViewRootImpl@dd08953[VerifyActivity]: dispatchDetachedFromWindow
2018-09-30 17:56:38.624 22151-22151/app.ufarm.ir.ufarm D/InputTransport: Input channel destroyed: fd=81

这是活动

public class VerifyActivity extends AppCompatActivity {

private String phone;
private String token;
private Timer T;
private int count = 0;
private TextView activity_verify_btn_confirm;

@Override
protected void attachBaseContext(Context newBase) {
    super.attachBaseContext(CalligraphyContextWrapper.wrap(newBase));
}


@Override
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_verify);
    ButterKnife.bind(this);

    try {
        Intent intent = getIntent();
        phone = intent.getStringExtra("phone");
    } catch (Exception e) {
    }

    activity_verify_btn_confirm = (TextView) findViewById(R.id.activity_verify_btn_confirm);
    activity_verify_btn_confirm.setOnClickListener(new View.OnClickListener() {
        @Override
        public void onClick(View view) {
        //   new getVerifyServiceAsync().execute(Urls.BASE_URL + Urls.VERIFY, phone, activity_verify_tv_code.getText().toString());

        }
    });

    activity_verify_tv_resend.setVisibility(View.GONE);
    secondCounter();

    activity_verify_tv_code.addTextChangedListener(new TextWatcher() {
        @Override
        public void beforeTextChanged(CharSequence charSequence, int i, int i1, int i2) {

        }

        @Override
        public void onTextChanged(CharSequence charSequence, int i, int i1, int i2) {
            if (charSequence.toString().length() < 5) {
                activity_verify_btn_confirm.setEnabled(false);
            } else {
                InputMethodManager imm = (InputMethodManager) getApplicationContext().getSystemService(Activity.INPUT_METHOD_SERVICE);
                imm.hideSoftInputFromWindow(activity_verify_tv_code.getWindowToken(), 0);

                activity_verify_btn_confirm.setEnabled(true);

            }
        }

        @Override
        public void afterTextChanged(Editable editable) {

        }
    });

}

@BindView(R.id.loading_indicator)
FrameLayout loading_indicator;

@BindView(R.id.avi)
AVLoadingIndicatorView avi;

@BindView(R.id.activity_verify_tv_code)
EditText activity_verify_tv_code;

@BindView(R.id.activity_verify_tv_resend)
TextView activity_verify_tv_resend;

@BindView(R.id.activity_verify_tv_timer)
TextView activity_verify_tv_timer;

@OnClick(R.id.activity_verify_tv_resend)
void resend() {
    new getLoginServiceAsync().execute(Urls.BASE_URL + Urls.LOGIN, phone);
    secondCounter();

}

@OnClick(R.id.activity_verify_tv_change_phone)
void change_phone() {
    Intent intent = new Intent(VerifyActivity.this, LoginActivity.class);
    VerifyActivity.this.startActivity(intent);
    finish();

}

private class getVerifyServiceAsync extends Webservice.verifyService {
    @Override
    protected void onPreExecute() {
        loading_indicator.setVisibility(View.VISIBLE);
        avi.show();
    }

    @Override
    protected void onPostExecute(String result) {
        loading_indicator.setVisibility(View.GONE);
        String x = result;
        try {
            JSONObject jsonObject = new JSONObject(result);
            Boolean state = jsonObject.getBoolean("status");


            if (state) {
                // code was correct
               /* JSONObject extra = jsonObject.getJSONObject("extra");
                boolean registered = extra.getBoolean("registered");*/
                JSONObject data = jsonObject.getJSONObject("data");
                boolean registered = data.getBoolean("is_register");
                if (registered) {

                    /*JSONObject data = jsonObject.getJSONObject("data");*/
                    JSONObject extra = jsonObject.getJSONObject("extra");
                    JSONObject user = extra.getJSONObject("user");
                    int id = user.getInt("id");
                    String name = user.getString("name");
                    String email = user.getString("email");
                    String national_number = user.getString("national_number");
                    String mobile = user.getString("mobile");
                    JSONArray wallets = user.getJSONArray("wallets");
                    JSONObject wallet = wallets.getJSONObject(0);
                    int walletID = wallet.getInt("id");
                    G.WALLET_ID.edit().putInt("WALLET_ID", walletID).apply();
                    int is_active = wallet.getInt("is_active");
                    if (is_active == 0) {
                        G.HAS_WALLET.edit().putBoolean("HAS_WALLET", false).apply();
                    } else {
                        G.HAS_WALLET.edit().putBoolean("HAS_WALLET", true).apply();
                    }


                    String photo = "0";
                    try {
                        photo = user.getString("photo");
                    } catch (Exception e) {
                    }
                    JSONArray address = user.getJSONArray("addresses");
                    JSONArray userActivity = user.getJSONArray("user_activities");


                    G.IS_REGISTERED.edit().putBoolean("IS_REGISTERED", true).apply();
                    G.CUSTOMER_ID.edit().putString("CUSTOMER_ID", String.valueOf(id)).apply();
                    G.CUSTOMER_NAME.edit().putString("CUSTOMER_NAME", name).apply();
                    G.CUSTOMER_EMAIL.edit().putString("CUSTOMER_EMAIL", email).apply();
                    G.CUSTOMER_NATIONAL_NUMBER.edit().putString("CUSTOMER_NATIONAL_NUMBER", national_number).apply();
                    G.CUSTOMER_PHONE.edit().putString("CUSTOMER_PHONE", mobile).apply();
                    G.CUSTOMER_PHOTO.edit().putString("CUSTOMER_PHOTO", photo).apply();
                    G.CUSTOMER_ADDRESS.edit().putString("CUSTOMER_ADDRESS", String.valueOf(address)).apply();
                    G.CUSTOMER_ACTIVITY.edit().putString("CUSTOMER_ACTIVITY", String.valueOf(userActivity)).apply();

                    G.IS_REGISTERED.edit().putBoolean("IS_REGISTERED", true).apply();
                    JSONObject extra1 = jsonObject.getJSONObject("extra");
                    try {
                        token = "Bearer " + extra1.getString("token");
                        G.TOKEN.edit().putString("TOKEN", token).apply();
                    } catch (Exception e) {
                    }


                    try {
                        InputMethodManager imm = (InputMethodManager) getSystemService(Context.INPUT_METHOD_SERVICE);
                        imm.hideSoftInputFromWindow(activity_verify_tv_code.getWindowToken(), 0);
                    } catch (Exception e) {
                    }
                    finish();


                } else {

                    Intent intent = new Intent(VerifyActivity.this, RegisterActivity.class);
                    intent.putExtra("phone", phone);
                    VerifyActivity.this.startActivity(intent);
                    finish();
                }


            } else {
                // code was inCorrect
                Toast.makeText(VerifyActivity.this, "کد وارد شده اشتباه است", Toast.LENGTH_SHORT).show();

            }
        } catch (JSONException e) {
            e.printStackTrace();
        }


    }

}

private void secondCounter() {

    T = new Timer();
    T.scheduleAtFixedRate(new TimerTask() {
        @Override
        public void run() {
            runOnUiThread(new Runnable() {
                @Override
                public void run() {
                    if (count < 60) {
                        activity_verify_tv_resend.setVisibility(View.GONE);
                        activity_verify_tv_timer.setVisibility(View.VISIBLE);
                        activity_verify_tv_timer.setText(" ارسال مجدد پس از " + (60 - count) + " ثانیه ");
                        count++;
                    } else {
                        T.cancel();
                        count = 0;
                        activity_verify_tv_resend.setVisibility(View.VISIBLE);
                        activity_verify_tv_timer.setVisibility(View.GONE);
                    }
                }
            });
        }
    }, 1000, 1000);

}

private class getLoginServiceAsync extends Webservice.loginService {
    @Override
    protected void onPreExecute() {

    }

    @Override
    protected void onPostExecute(String result) {
        try {
            JSONObject jsonObject = new JSONObject(result);
            Boolean state = jsonObject.getBoolean("status");
            if (state) {
                Toast.makeText(VerifyActivity.this, "کد ارسال شد", Toast.LENGTH_SHORT).show();
            } else {
                Toast.makeText(VerifyActivity.this, "کد ارسال نشد", Toast.LENGTH_SHORT).show();
            }
        } catch (JSONException e) {
            e.printStackTrace();
        }
    }

}

}

任何想法?

更新------------------------------------------- ----------

清单定义代码

验证是存在问题的活动

登录是相同的活动,没有问题

  <activity
        android:name=".Activity.LoginActivity"
        android:theme="@style/Theme.Intro"
        android:windowSoftInputMode="stateHidden|adjustResize" />
    <activity
        android:name=".Activity.VerifyActivity"
        android:theme="@style/Theme.Intro"
        android:windowSoftInputMode="stateHidden|adjustResize" />

**可能不会崩溃,但是活动自动完成并且出现了先前的活动

**该问题在某些设备上不存在

1 个答案:

答案 0 :(得分:0)

我发现了问题。那是因为另一个button提升了前一个activity。当keyboard打开时,adjust pan导致button移到主button下方,由于与主按钮的颜色完全相同,我没有注意到。更改xml可以解决问题