(Cần giúp đỡ) Cập nhật dữ liệu cho Listview khi ở activity khác
Hiện tại mình đang tập tành viết 1 app nhỏ bằng android, kiểu quản lý sổ tiết kiệm đơn giản. App mình ngoài main activity ra thì có 2 activity khác là activity_NhapSoTietKiem và activity_QuanLySoTietKiem. Vấn đề hiện tại mình đang gặp phải là khi thêm 1 STK từ activity_NhapSoTietKiem thì bên activity_QuanLySoTietKiem nó không có cập nhật cái STK mới nhập lên. Mình có search google thì bảo là dùng cái notifyDataSetChanged(). Nhưng mình dùng thì nó chỉ áp dụng được khi ở bên activity_QuanLySoTietKiem còn activity kia thì không được. Mình đã thử khá nhiều cách nhưng vẫn bị lỗi hoặc không hiện được bên activity_QuanLySoTietKiem
Dưới đây là code của mình, rất mong được mọi người giúp đỡ.
Code xử lý khi bấm nút Thêm
buttonThem = (Button)findViewById(R.id.button_Them);
buttonThem.setOnClickListener(new Button.OnClickListener() {
@Override
public void onClick(View v) {
tienGui = (EditText) findViewById(R.id.text_SoTienGui);
laiSuat = (EditText) findViewById(R.id.text_LaiSuat);
kyHan = (EditText) findViewById(R.id.text_KyHan);
nganHang = spinnerNganHang.getSelectedItem().toString();
kieuTraLai = spinnerKieuLayLai.getSelectedItem().toString();
SoTietKiem stk = new SoTietKiem(ngayGui.getText().toString(),
Integer.parseInt(kyHan.getText().toString()),
Double.parseDouble(tienGui.getText().toString())
, Float.parseFloat(laiSuat.getText().toString()),
Float.parseFloat(laiSuatThuong.getText().toString()),
nganHang, kieuTraLai);
if(list_STK.themSTK(stk)){
Toast.makeText(v.getContext(),"Bạn đã thêm thành công 1 sổ tiết kiệm vào danh sách",Toast.LENGTH_SHORT).show();
}
}
});
Code bên activity_QuanLySoTietKiem
package com.example.zhenande.quanlysotietkiem;
import android.os.Bundle;
import android.support.v7.app.AppCompatActivity;
import android.support.v7.widget.Toolbar;
import android.util.Log;
import android.view.View;
import android.widget.AdapterView;
import android.widget.ArrayAdapter;
import android.widget.Button;
import android.widget.ListView;
import android.widget.Spinner;
import android.widget.Toast;
import java.util.ArrayList;
> public class QuanLySoTietKiem extends AppCompatActivity {
> private ListSoTietKiem listSTK = new ListSoTietKiem();
> private Spinner spinnerNganHangHienCo;
> private ArrayList<String> nganHangList = new ArrayList<String>();
> private ArrayList<SoTietKiem> DS_STK = listSTK.getListSTK();;
> private ListView listView;
> private ListSTKMini listSTKMini = new ListSTKMini();
> private ArrayList<STKMini> DS_STK_Mini = new ArrayList<STKMini>(listSTKMini.getSTKMini());
> private ArrayAdapter<String> arrayAdapter;
> private CustomListAdapter cla;
> public QuanLySoTietKiem(){
> }
> @Override
> protected void onCreate(Bundle savedInstanceState) {
> super.onCreate(savedInstanceState);
> setContentView(R.layout.activity_quan_ly_so_tiet_kiem);
> Toolbar toolbar = (Toolbar) findViewById(R.id.toolbar);
> setSupportActionBar(toolbar);
> nganHangList.add("Tất cả");
> for (SoTietKiem stk : DS_STK) {
> if (!nganHangList.contains(stk.getNganHang())) {
> nganHangList.add(stk.getNganHang());
> }
> }
> spinnerNganHangHienCo = (Spinner) findViewById(R.id.spinner_HienThi);
> arrayAdapter = new ArrayAdapter<String>(this, android.R.layout.simple_spinner_item, nganHangList);
> arrayAdapter.setDropDownViewResource(android.R.layout.simple_spinner_dropdown_item);
> spinnerNganHangHienCo.setAdapter(arrayAdapter);
> DS_STK_Mini = listSTKMini.getSTKMini();
> listView = (ListView) findViewById(R.id.listView_cacSTK);
> cla = new CustomListAdapter(this, DS_STK_Mini);
> listView.setAdapter(cla);
> final ArrayList<STKMini> ds_copy = new ArrayList<STKMini>();
> for(STKMini stk : DS_STK_Mini){
> ds_copy.add(stk);
> }
> spinnerNganHangHienCo.setOnItemSelectedListener(new AdapterView.OnItemSelectedListener() {
> @Override
> public void onItemSelected(AdapterView<?> parent, View view, int position, long id) {
> Object o = parent.getItemAtPosition(position);
> // Toast.makeText(parent.getContext(),"Ngan hang dang chon la: " + parent.getItemAtPosition(position).toString(),
> // Toast.LENGTH_SHORT).show();
> for (STKMini stk : ds_copy) {
> if (!DS_STK_Mini.contains(stk)) {
> DS_STK_Mini.add(stk);
> }
> }
> if (position == 0) {
> for (STKMini stk : ds_copy) {
> if (!DS_STK_Mini.contains(stk)) {
> DS_STK_Mini.add(stk);
> }
> }
> cla.notifyDataSetChanged();
> } else {
> for (int i = DS_STK_Mini.size() - 1; i >= 0; i--) {
> if (!DS_STK_Mini.get(i).getTenNganHang().equals(o)) {
> DS_STK_Mini.remove(i);
> cla.notifyDataSetChanged();
> }
> }
> }
> }
> @Override
> public void onNothingSelected(AdapterView<?> parent) {
> }
> });
> }
> public CustomListAdapter getCLA() {
> return cla;
> }
> }
Cái này liên quan đến truyền data giữa 2 Activity.
Bạn nên nghiên cứu về phần Intent để truyền dữ liệu giữa 2 activity.
vd activity A chứa ListView, activity B chứa form nhập thông tin.
Khi B bấm hoàn thành thì truyền dữ liệu về cho A, lúc này A thực hiện thao tác cập nhật dữ liệu về gọi hàm notifyDataSetChanged để hiển thị những thay đổi.
Từ khóa cho bạn nghiên cứu:
Intent
,onActivityResult
,Android activity lifecycle
,onResume
.