对话框关闭后出现EditText光标错误

时间:2018-06-20 12:38:42

标签: android android-edittext

bug demo

我遇到了问题。不确定该怎么称呼它,或导致它的原因

我正在学习Android SQLite,并开始训练制作简单的记事应用程序。

问题是我有一个用于类别选择的自定义对话框,在打开对话框之前,EditText字段中的一切都很好,但是在打开并关闭它之后,文本开始覆盖,例如创建相同文本的多个图层,然后文本光标在每个符号后都留下一行。 (请参阅问题的“错误演示” GIF)

还有其他人看到过这样的东西吗?对话框是什么原因造成的?

编辑:

这是单击星号以打开对话框时执行的代码

 starred.setOnClickListener(new View.OnClickListener() {
        @Override
        public void onClick(View v) {

                AlertDialog.Builder builder = new AlertDialog.Builder(CreateNoteActivity.this);
                View mView = getLayoutInflater().inflate(R.layout.dialog_category_select, null);
                ListView categoryList = mView.findViewById(R.id.category_list);
                Button cancelSelect = mView.findViewById(R.id.cancelSelect);

                final CategoryListAdapter adapter = new CategoryListAdapter(CreateNoteActivity.this);
                categoryList.setAdapter(adapter);
                //get the data and append to a list
                Cursor data = myDB.getCategories();
                while(data.moveToNext()){
                    Category thisNote = new Category(data.getInt(0), data.getString(1), data.getString(2));
                    adapter.add(thisNote);
                }

                categoryList.setOnItemClickListener(new AdapterView.OnItemClickListener() {
                    @Override
                    public void onItemClick(AdapterView<?> adapterView, View view, final int i, long l) {
                        final Category selectedCategory = (Category) adapterView.getItemAtPosition(i);
                        int duration = Toast.LENGTH_SHORT;
                        String s = "Category celected: "+selectedCategory.getCategoryName();
                        Toast toast = Toast.makeText(context, s, duration);
                        toast.show();
                    }
                });

                builder.setView(mView);

                final AlertDialog selectCategory = builder.create();
                selectCategory.getWindow().setBackgroundDrawable(new ColorDrawable(getResources().getColor(android.R.color.transparent)));
                selectCategory.show();
                View decorView = getWindow().getDecorView();
                decorView.setBackgroundResource(android.R.color.transparent);
                int width = (int)(getResources().getDisplayMetrics().widthPixels*0.80);
                int height = (int)(getResources().getDisplayMetrics().heightPixels*0.80);

                selectCategory.getWindow().setLayout(width, height);

                cancelSelect.setOnClickListener(new View.OnClickListener() {
                    @Override
                    public void onClick(View v) {
                        selectCategory.dismiss();
                    }
                });

        }
    });

3 个答案:

答案 0 :(得分:2)

此答案可能会对您有所帮助

在对话框关闭后将其写入

ediText = findViewById(R.id.edit_text);

editText.setSelection(editText.getText().length);

基本上使用上述逻辑,光标不会指向editText关闭处dialog的第一个字符

答案 1 :(得分:1)

注意到我试图设置透明背景以两次显示自定义对话框bcg。 所以解决此问题的原因是删除了两行

*View decorView = getWindow().getDecorView();
decorView.setBackgroundResource(android.R.color.transparent);*

不确定为什么会导致此问题。应该检查什么是getDecorView()方法。使用它的原因是找到它作为显示自定义背景的解决方案。

这条线也很好

dialog.getWindow().setBackgroundDrawable(new ColorDrawable(getResources().getColor(android.R.color.transparent)));

猜猜这是橡皮鸭调试的案例-只需告诉某人有关问题即可解决。感谢大家。

答案 2 :(得分:0)

关闭或关闭对话框时,请尝试使用此代码,

edittext.setSelection(editText.getText().toString().trim().length);