2016-10-11 9 views
0

概要:データベースとしてSQLiteを使ったサンプルメモアプリを作成しています。notifyDataSetChanged()を使用します。

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

    lv = (ListView)findViewById(R.id.memo_list_view); 

    Cursor c = SplashActivity.db.rawQuery("SELECT * FROM memos", null); 
    if(c.getCount()!=0) { 
     while(c.moveToNext()) { 

      memoDetails = new MemoDetails(); 

      memoDetails.setmMemoId(c.getString(0)); 
      memoDetails.setmMemoTitle(c.getString(1)); 
      memoDetails.setmCreatedDate(c.getString(3)); 
      memoDetails.setmAlarmedDate(c.getString(4)); 
      memos.add(memoDetails); 

     } 
     c.close(); 
     customAdapter = new CustomAdapter(this, memos); 
     lv.setAdapter(customAdapter); 
    } 

@Override 
protected void onResume() { 
    super.onResume(); 
    customAdapter.notifyDataSetChanged(); 
} 

MainActivityはその後、これは、この「追加で、私は私のメモを追加する活動

AddMemoActivity(これは私が使用してリスナーです)

saveMemo.setOnClickListener(new View.OnClickListener() { 
     @Override 
     public void onClick(View v1) { 
      if(memoTitle.getText().toString().trim().length() == 0 || 
       memoContent.getText().toString().trim().length() == 0) { 
       showMessage("Error", "Please Enter All Values");  
      } else { 

       SimpleDateFormat sdf = new SimpleDateFormat("MMMM dd, yyyy HH:mm:ss"); 
       String currentDateandTime = sdf.format(new Date()); 

       SplashActivity.db.execSQL("INSERT INTO memos VALUES(null,'" 
         + memoTitle.getText() + "','" 
         + memoContent.getText() + "','" 
         + currentDateandTime + "','" 
         + currentDateandTime + "','0');"); 

      showMessage("Success", "Memo is Saved."); 
      } 
     } 
    }); 

ですメモ "部分、私の問題は私が私を残すときです。AddMemoActと私のMainActivtyに戻ると、私のリストビューは更新されません。あなたが見ることができるように

第二には私の削除一部、

MainActivity

findViewById(R.id.del_memo).setOnClickListener(new View.OnClickListener() { 
     @Override 
     public void onClick(View v1) {    
      DialogInterface.OnClickListener dialogClickListener = new DialogInterface.OnClickListener() { 
       @Override 
       public void onClick(DialogInterface dialog, int which) { 
        switch (which){ 
        case DialogInterface.BUTTON_POSITIVE: 
         String deleteIds = null; 
         for (MemoDetails p : customAdapter.getBox()) { 
          if (p.mCheckBox){ 
           if(deleteIds == null) { 
            deleteIds = p.getmMemoId(); 
           } else { 
            deleteIds += ", " + p.getmMemoId(); 
           } 

          } 
         } 

         SplashActivity.db.execSQL("DELETE FROM memos WHERE id IN ('"+deleteIds+"')"); 
         customAdapter.notifyDataSetChanged(); 

         Toast.makeText(getApplicationContext(), deleteIds, 
            Toast.LENGTH_LONG).show(); 
         break; 

        case DialogInterface.BUTTON_NEGATIVE: 
         //No button clicked 
         break; 
        } 
       } 
      }; 

      AlertDialog.Builder builder = new AlertDialog.Builder(MemoListActivity.this); 
      builder.setMessage("Are you sure?").setPositiveButton("Yes", dialogClickListener) 
       .setNegativeButton("No", dialogClickListener).show(); 
     } 
    });  

ですが、私はすでに)(customAdapter.notifyDataSetChangedを追加しました。が削除されたが、まだ更新されていない。

ありがとうございます。

答えて

0

DBを更新してもリストビューが更新されません。アダプタに与えたリストを更新してからnotifyDataChange()を呼び出す必要があります。

DBデータを変更するたびにlistviewのudapterに与えたリストを更新します。

memosリストを更新して、通知データの変更を呼び出すだけです。

0

notifyDataSetChangedだけでは役に立ちませんので、アダプターを渡したリストも更新する必要があります。

データとアダプターを充填初期:

その後
for (User user : SugarRecord.listAll(User.class)) { 
    userNames.add(user.getName()); 
} 
swipeActionAdapter = new SwipeActionAdapter(new ArrayAdapter<>(this, android.R.layout.simple_list_item_1, userNames)); 

ユーザーを追加または削除した後:

userNames.clear(); 
for (User user : SugarRecord.listAll(User.class)) { 
     userNames.add(user.getName()); 
} 
swipeActionAdapter.notifyDataSetChanged(); 
それは私のために次のようになりますので、私は私のSQL操作のためSugarORMを使用します
関連する問題