การดักค่าใน EditText แบบ AlertDialog หรือ setError


      สวัสดีครับ. วันนี้ผมจะมาพูดถึงเรื่องของ EditText นิดนึง. คงไม่มีใครไม่รู้จัก EditText นะครับ. ถ้าไม่รู้จักก็ไปดูตัวนี้เลยยย. EditText ก็คือ Wiget ตัวหนึ่งของแอนดรอยด์. หรือเรียกว่าเครื่องมือก็ได้. ที่ใช้ในการใส่ข้อความลงไป. โดยที่ EditText นั้นแน่นอนว่ามันสำคัญมากๆกับทุกโปรเจคในแอนดรอยด์. และในโปรแกรมทุกโปรแกรม. เพราะมันก็ต้องมีการใส่ค่าอะไรสักอย่างลงไปอย่างแน่นอน. ซึ่งในเมื่อมีการใส่ค่าแล้ว. เราก็ควรจะต้องมีการดักค่าลงนั้นด้วย. เพื่อป้องกันข้อมูลที่ไม่พึงประสงค์ต่างๆ. เช่น ให้ใส่ตัวเลข  แต่ดันไปใส่อักขระ เป็นต้น. แล้วถ้าข้อมูลนั้นๆผิดประเภทขึ้นมา. จะมีการแสดงผลหรือ Interaction ออกมายังไง

      ในวันนี้ผมจะมานำเสนอด้วยกัน 2 แบบครับ นั้นคือ 1. AlerDialog และ 2. setError ซึ่งผมคิดว่าแบบนี้หลายคนก็น่าจะรู้จักอยู่แล้ว. แต่แบบ 2 เนี่ยผมก็เพิ่งรู้จักเหมือนกัน ไปดูกันเลยยยย

AlertDialog

      1. แบบ AlertDialog แบบนี้ก็คือแบบ pop up ขึ้นมานั้นเองโดยเราจะใช้คำสั่ง



final AlertDialog.Builder ad = new AlertDialog.Builder(this);

แบบนี้ครับ  เพื่อเป็นการประกาศ AlertDialog มาเก็บในตัวแปร ad จากนั้นก็ทำการเซ็ตค่าต่อเลย



ad.setTitle("Error! ");
ad.setIcon(android.R.drawable.btn_star_big_on);
ad.setPositiveButton("Close", null);

ข้างบนนี่ก็คือการเซ็คค่าของ ad หรือ AlertDialog นั้นเองครับ  โดยกำหนด Title เป็น Error! ก็คือแสดงหัวข้อว่า Error! 
  • setIcon ก็คือการแสดงรูปออกมาจาก Pop up ที่เป็นรูปดาวนั้นเอง. 
  • setPositiveButton ก็คือสร้างปุ่มที่เป็นข้อความใน AlertDialog ออกมานั้น. โดยใช้คำว่า Close (จะใช้คำไหนก็ได้นะ) ไม่ต้องการให้มันทำอะไรก็ใส่ null ลงไป ปล. แต่ถ้าต้องการให้มันทำคำสั่งอะไรก็ใส่ new DialogInterface.OnClickListener() แล้วทำการ Implement Methods ไปแล้วก็ใส่คำสั่งที่การทำ

แล้วถึงขั้นตอนการดัก ก็ให้ใส่คำสั่งดักไว้ใน Button เพื่อดักข้อมูลที่ไม่พึงประสงค์


if (edt_result1.getText().length() == 0 ) {
        ad.setMessage("กรุณาเติมคำในช่วงว่างก่อน");
        ad.show();
        edt_result1.requestFocus();
        return;
}

คำสั่งก็จะออกมาประมาณนี้. โดยที่ edt_result1 นั้นก็คือ editText ที่เราประกาศ getText().length() == 0 ก็คือไม่มีการใส่ค่าใดๆลงไป. ให้โชว์เป็นเงื่อนไขด้านล่าง. แล้วทำการ return

..........................

setError
2. แบบ SetError นั้นง่ายกว่าแบบแรกเยอะมาก. ไม่ต้องไปประกาศอะไรให้มันวุ่นวายเลย  เพราะการดักข้อมูลนั้น สามารถดักได้ใน editText นั้นเองอยู่แล้ว เพียงใส่คำสั่ง setErrot ลงไปนั้นเอง 


if (edt_result2.getText().length() == 0) {
edt_result2.setError("กรุณาเติมคำในช่องว่างก่อน");
edt_result2.requestFocus();
return;
}

ตามคำสั่งเลยครับ edt_result2 ก็คือ editText ที่เราได้ประกาศไว้นั้นเอง แล้วใช้ getText().length() == 0 ก็เหมือนเดิมครับ ดักข้อมูลไว้. แล้วใส่ setError เพื่อเป็นข้อความแดงๆ

ดูโค้ดทั้งหมด

xml
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:app="http://schemas.android.com/apk/res-auto"
    xmlns:tools="http://schemas.android.com/tools"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:gravity="center"
    android:orientation="vertical"
    tools:context="com.example.tanat29.example.MainActivity">

    <EditText
        android:id="@+id/edt_result1"
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:layout_margin="10dp"
        android:textSize="20dp"
        android:textStyle="bold"
        app:layout_constraintBottom_toBottomOf="parent"
        app:layout_constraintLeft_toLeftOf="parent"
        app:layout_constraintRight_toRightOf="parent"
        app:layout_constraintTop_toTopOf="parent" />

    <EditText
        android:id="@+id/edt_result2"
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:layout_margin="10dp"
        android:textSize="20dp"
        android:textStyle="bold" />

    <Button
        android:id="@+id/btn_check"
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:layout_margin="10dp"
        android:text="Check"
        android:textSize="18dp"
        android:textStyle="bold" />

</LinearLayout>

java

public class MainActivity extends AppCompatActivity {

    EditText edt_result1,edt_result2;
    Button btn_check;

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

        edt_result1 = findViewById(R.id.edt_result1);
        edt_result2 = findViewById(R.id.edt_result2);
        btn_check = findViewById(R.id.btn_check);

        final AlertDialog.Builder ad = new AlertDialog.Builder(this);
        ad.setTitle("Error! ");
        ad.setIcon(android.R.drawable.btn_star_big_on);
        ad.setPositiveButton("Close", null);

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

                if (edt_result1.getText().length() == 0 ) {
                    ad.setMessage("กรุณาเติมคำในช่วงว่างก่อน");
                    ad.show();
                    edt_result1.requestFocus();
                    return;
                }

                if (edt_result2.getText().length() == 0) {
                    edt_result2.setError("กรุณาเติมคำในช่องว่างก่อน");
                    edt_result2.requestFocus();
                    return;
                }

                Toast.makeText(MainActivity.this, edt_result1.getText().toString()+" "+edt_result2.getText().toString(), Toast.LENGTH_LONG).show();
            }
        });
    }
}

      เป็นยังไงกันบ้างครับ. สำหรับการดักข้อมูลจาก EditText ทั้ง 2 แบบ. เราสามารถใช้ดักแบบไหนก็ได้นะครับ. แล้วแต่จะเลือก. จริงๆแล้วยังมีมากกว่านี้อีกนะ. ที่ผมคุ้นๆมาการใช้ TextWatcher นั้นก็สามารถทำได้. เด่วจะมาอัพเดทให้ทุกๆคนได้อ่านกันอีกนะครับบบบ

🔯Source Code🔯

หน้าแรก โปรเจคแอนดรอยด์

ความคิดเห็น

โพสต์ยอดนิยมจากบล็อกนี้

การรับค่า ส่งค่าจากหน้าที่ 1 ไปหน้าที่ 2 บน Flutter (How to pass data between screens in Flutter?)

การจับเวลาบน Flutter ทำยังไง (How to count up timer flutter?)

วิธีการสลับข้อมูล MySQL ในคอลัมน์เดียวกัน