Tuesday, September 12, 2017

Truyền dữ liệu giữa các activity trong Android (2)

Trong bài này ta sẽ truyền dữ liệu ngược trở về Activity trước, ở đây sẽ là MainActivity.
Giả sử sau khi sang class second, ta muốn lấy giá trị người dùng nhập vào EditText để chuyển ngược về, ta sẽ làm như sau.
Tại MainActivity, sửa các lệnh trong nút b2 thành.
Intent in=new Intent(getBaseContext(),second.class);
Bundle bun = new Bundle();
bun.putString("chu",a );
bun.putInt("so", sovidu);
bun.putStringArray("gi", qua);
in.putExtras(bun);                                                                              
startActivityForResult(in, 1);
Lệnh chuyển đi có hơi khác một chút, ta dùng startActivityForResult tức là để chờ kết quả là cái gì đó sẽ chuyển về .
Copy tiếp những dòng sau lên trên dấu ngoặc đóng cuối cùng
@Override
protected void onActivityResult(int requestCode, int resultCode, Intent data) {    
   if (requestCode == 1) {
   if(resultCode==3){         
      Bundle bun = data.getExtras();
      String ve = bun.getString("iz");
         tv.setText(ve);
       }                
           } else if (resultCode == RESULT_CANCELED) {
             // Handle cancel
          }
       }
Mấu chốt ở đây là lệnh Override này, ta lấy về một String và set nó vào textView trên cùng. Để ý chữ resultCode == 3.

Tại class second, copy các dòng sau vào nút b2, trên chữ finish()
String nhap=e.getText().toString();
Intent in = getIntent();
Bundle bun = new Bundle();
bun.putString("iz", nhap);
in.putExtras(bun);
setResult(3, in);

Trong lệnh này, ta lấy String từ editText để truyền về class trước, chú ý dòng setResult(3, in);
Bên kia ta để resultCode là bao nhiêu thì setResult cũng thế.
Key để chuyển ta dùng “iz” thì bên kia cũng vậy.
Save lại và chạy chương trình, khi màn hình 2 bật ra thì nhập số nào đó bất kỳ vào ô Edittext để khi ấn Quit ta thấy nó đã được truyền về set lên textView trên cùng.






No comments:

Post a Comment