首页 > 解决方案 > 为什么自定义对话框中的 EditText 不会立即在 TextView 中加载文本

问题描述

我写了关于笔记部分的源代码。

描述 Activity( recyclerView)。地名,笔记预览(textView),笔记+按钮(imageView),预览图像(imageView)。

如果单击注释+按钮,将出现注释自定义对话框。自定义对话框有注释内容(EditText)、取消按钮、确定按钮。

我使用arrayList 管理项目recyclerView,所以我确实使用arrayList 的索引将注释内容( EditText)发送到注释预览( )。textView

但是当注释被编辑时我遇到了麻烦。单击注释 + 按钮,EditText自定义对话框中的注释内容()不会立即在注释预览(textView)中加载文本。

我应该怎么办?

这是我的代码。

备忘录活动.java

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_memo);

        recyclerView = (RecyclerView) findViewById(R.id.rv_vertical);
        linearLayoutManager = new LinearLayoutManager(this);
        recyclerView.setLayoutManager(linearLayoutManager);

        arrayList = new ArrayList<>();

        placeMemoAdapter = new PlaceMemoAdapter(arrayList, this, this);
        recyclerView.setAdapter(placeMemoAdapter);

        PlaceMemoData testData1 = new PlaceMemoData();
        testData1.setPlaceMemoNumCircle("1");
        testData1.setPlaceNameMemo("place1");
        testData1.setMemoAddView(R.drawable.ic_add_memo);
        testData1.setMemoPreView("content1");
        testData1.setMemoPreViewImage(R.drawable.ic_memo_image);

        arrayList.add(testData1);

        PlaceMemoData testData2 = new PlaceMemoData();
        testData2.setPlaceMemoNumCircle("2");
        testData2.setPlaceNameMemo("place2");
        testData2.setMemoAddView(R.drawable.ic_add_memo);
        testData2.setMemoPreView("content2");
        testData2.setMemoPreViewImage(R.drawable.ic_memo_image);

        arrayList.add(testData2);

        placeMemoAdapter.notifyDataSetChanged();

        dialog01 = new Dialog(MemoActivity.this);
        dialog01.requestWindowFeature(Window.FEATURE_NO_TITLE);
        dialog01.setContentView(R.layout.add_memo);
        dialog01.setCanceledOnTouchOutside(false);

    }

    public void showDialog01(final int position) {
        dialog01.show();

        Button bt_cancel_memo = dialog01.findViewById(R.id.bt_cancel_memo);
        Button bt_ok_memo = dialog01.findViewById(R.id.bt_ok_memo);

        bt_cancel_memo.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View view) {
                dialog01.dismiss();
            }
        });

        bt_ok_memo.setOnClickListener(new View.OnClickListener() {

            @Override
            public void onClick(View view) {
                EditText memo_content = dialog01.findViewById(R.id.memo_content);
                if(memo_content.getText() == null) {
                    arrayList.get(position).setMemoPreView("");
                    placeMemoAdapter.notifyDataSetChanged();
                    dialog01.dismiss();
                }else{
                    TextView MemoPre = (TextView) findViewById(R.id.memoPreView);
                    memo_content.setText(arrayList.get(position).getMemoPreView());
                    placeMemoAdapter.notifyDataSetChanged(); 
                    // loading time is very long.
                    // I clicked first item -> editText appears empty.
                    // right away I clicked second item -> editText appears first item`s text in textView.
                    // because of loading time.
                    
                    MemoPre.setText(String.valueOf(memo_content.getText()));
                    //placeMemoAdapter.notifyDataSetChanged();
                    // That code looks like getting original note preview`s text.
                    // so I commented out that.
                    arrayList.get(position).setMemoPreView(String.valueOf(MemoPre.getText()));
                    placeMemoAdapter.notifyDataSetChanged();
                    dialog01.dismiss();
                }
            }
        });
    }

@Override
    public void onItemClickListener(View view, int position) {
        showDialog01(position);
    }

+我知道使用DialogFragmentAndroid Studio 的推荐。如果我得到答案或提示该问题,我将更改代码。

标签: javaandroid-studiotextviewandroid-edittextdialog

解决方案


推荐阅读