마스터Q&A 안드로이드는 안드로이드 개발자들의 질문과 답변을 위한 지식 커뮤니티 사이트입니다. 안드로이드펍에서 운영하고 있습니다. [사용법, 운영진]

notifyDataSetChanged();가 작동을 안합니다.

0 추천

리스트뷰 목록에서 지운후에 notifyDataSetChanged();를 사용해서 갱신을 하려고 하는데 화면에서 지워졌다가 뒤로가기 후에 다시 들어가면 다시 원래대로 돌아와버리는데 notifyDataSetChanged();가 작동을 안해서 그런것 같습니다ㅠ runOnUiThread? 같은거도 써봤는데 여전히 안돼요 ㅠ SQLite쓰고있습니다

DBHelper helper = new DBHelper(getApplicationContext(), "movie.db", null, 1);
        SQLiteDatabase db = helper.getWritableDatabase();
        helper.onCreate(db);



        likelist = (ListView) findViewById(R.id.likeListView);


        like = new ArrayList<>();
        final TextView userName = (TextView) findViewById(R.id.userName);
        arrAdapter = new ArrayAdapter<String>(this, android.R.layout.simple_list_item_single_choice, like);
        likelist.setAdapter(arrAdapter);

final Cursor c = db.query("like", null, null, null, null, null, null, null);
        while(c.moveToNext()) {
            arrAdapter.add(c.getString(c.getColumnIndex("title")));
        }


        likelist.setOnItemClickListener(new AdapterView.OnItemClickListener() {
                                            @Override
                                            public void onItemClick(AdapterView<?> parent, View view, int position, long id) {
                                                final int count;
                                                final int[] checked = new int[1];
                                                count = arrAdapter.getCount();

                                                new AlertDialog.Builder(ProfileActivity.this)
                                                        .setTitle("취소").setMessage("삭제")

                                                        .setPositiveButton("삭제", new DialogInterface.OnClickListener() {
                                                            public void onClick(DialogInterface dialog, int whichButton) {
                                                                if (count > 0) {
                                                                    // 현재 선택된 아이템의 position 획득.
                                                                    checked[0] = likelist.getCheckedItemPosition();

                                                                    if (checked[0] > -1 && checked[0] < count) {

                                                                        new Thread(new Runnable() {
                                                                            @Override
                                                                            public void run() {
                                                                                runOnUiThread(new Runnable() {
                                                                                    @Override
                                                                                    public void run() {
                                                                                        c.moveToPosition(checked[0]);
                                                                                        // 아이템 삭제
                                                                                        like.remove(c.getString(c.getColumnIndex("title")));

                                                                                        // listview 선택 초기화.
                                                                                        likelist.clearChoices();

                                                                                        // listview 갱신.
                                                                                        arrAdapter.notifyDataSetChanged();
                                                                                    }
                                                                                });
                                                                            }
                                                                        }).start();
                                                                    }
                                                                }
                                                            }
                                                        })

                                                        .setNegativeButton("취소", new DialogInterface.OnClickListener() {
                                                            public void onClick(DialogInterface dialog, int whichButton) {

                                                            }
                                                        })
                                                        .show();

                                            }
                                        });

reference 문제라고 하던데 잘 모르겠습니다 ㅠ

익명사용자 님이 2017년 6월 25일 질문

1개의 답변

0 추천
activity에 재진입 할때마다 DB에서 다시 읽어들이는거 같은데,

뒤로 갔다가 다시 들어왔을때 변경사항이 유지되길 원하신다면,

item삭제시 DB도 업데이트 해야하지 않을까요?
디자이너정 (42,810 포인트) 님이 2017년 6월 25일 답변
arrAdapter대신 like를 써서
like.remove(c.getString(c.getColumnIndex("title")));를 해도 안돼서
like.notifyDataSetChanged(); 등등 해봤는데 마찬가지라 뭘 잘못한걸까요..
...