使用自定义ArrayAdapter和数据库的notifyDataSetOnChange

时间:2015-03-18 14:44:37

标签: android arrays android-arrayadapter

当我从列表中删除一个笔记时,它会被取消,但如果我写了另一个笔记,则会再次在列表中显示之前取消的笔记

我希望有人知道如何告诉我这是什么问题。

数据库中的方法,用于删除注释

public boolean deleteNote(Nota nota){
    boolean resultDelete = false;
    SQLiteDatabase dbLite = this.getWritableDatabase();
    String whereClause = "_id = ?";
    String []whereArg = { nota.getId() + "" };
    long a = dbLite.delete("vasca", whereClause, whereArg);
    if (a == -1){
        resultDelete = false;
    }else{
        resultDelete = true;
    }
    dbLite.close();
    return resultDelete;
}

MainActivity ,我有ListView

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

    db = Database.getInstance(this);
    list = db.listNote();

    // inizializza l'ArrayAdapter
    noteAdapter = new NoteAdapter();
    // setta l'ArrayAdapter
    ((ListView) findViewById(R.id.list)).setAdapter(noteAdapter);

这里,在覆盖方法getView中我尝试:

imgRemove.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {
                boolean removeCheck = db.deleteNote(list.get(position));
                if (removeCheck){
                    System.out.println("RIMOSSOOOOOOOOOOOOOOOOOOOOO");
                    list.remove(getItem(position));

                }else{
                    System.out.println("AAAAAAAAAAAAAAAAAAAAAAAA");
                }
                noteAdapter.notifyDataSetChanged();
            }
        });

适配器的InnerClass

class NoteAdapter extends ArrayAdapter<Nota> {

    NoteAdapter() {
        super(getApplicationContext(), R.layout.item, list);
    }
    /*
    public void swapItems(ArrayList<Nota> list) {
        this.noteItem = list;
        noteAdapter.notifyDataSetChanged();
    }*/

    @Override
    public View getView(final int position, final View convertView, final ViewGroup parent) {
        View row = convertView;
        if (row == null) {
            LayoutInflater inflater = getLayoutInflater();
            row = inflater.inflate(R.layout.item, null);
        }
        TextView titoloNota = (TextView) row.findViewById(R.id.row);
        TextView bkNota = (TextView) row.findViewById(R.id.row);
        ImageButton imgRemove = (ImageButton) row.findViewById(R.id.imgDelete);

        {
            // Settaggio dei colori background e textcolor nel ListView
            if (list.get(position).getColore() == Nota.green) {
                bkNota.setBackgroundColor(getResources().getColor(R.color.bk_green));
                bkNota.setTextColor(getResources().getColor(R.color.bk_yellow));
            } else if (list.get(position).getColore() == Nota.yellow) {
                bkNota.setBackgroundColor(getResources().getColor(R.color.bk_yellow));
                bkNota.setTextColor(getResources().getColor(R.color.bk_green));
            } else {
                bkNota.setBackgroundColor(getResources().getColor(R.color.bk_red));
                bkNota.setTextColor(getResources().getColor(R.color.bk_green));
            }
        }

        // setta il titolo della nota
        titoloNota.setText(list.get(position).getTitolo());

        // listener per la rimozione della nota tramite imagebutton
        imgRemove.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {
                boolean removeCheck = db.deleteNote(list.get(position));
                if (removeCheck){
                    System.out.println("RIMOSSOOOOOOOOOOOOOOOOOOOOO");
                    noteAdapter.remove(getItem(position));

                }else{
                    System.out.println("AAAAAAAAAAAAAAAAAAAAAAAA");
                }
                noteAdapter.notifyDataSetChanged();
            }
        });
        return row;
    }
}

1 个答案:

答案 0 :(得分:0)

AdapterName.this.notifyDatasetChanged();