【问题标题】:notifyDataSetOnChange with custom ArrayAdapter and DatabasenotifyDataSetOnChange 与自定义 ArrayAdapter 和数据库
【发布时间】:2015-05-21 09:58:15
【问题描述】:

当我从列表中删除一个笔记时,它会被取消,但是如果我写另一个笔记,列表中会再次出现之前取消的笔记

我希望有人知道如何告诉我问题所在。

数据库中删除笔记的方法

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();
            }
        });

适配器的内部类

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;
    }
}

【问题讨论】:

  • database 中删除item 并调用notifyDataSetChanged,这将再次加载现有数据就足够了。为什么你还要删除 `list.remove(getItem(position));` 另外请告诉我们NoteAdapter 代码
  • 您需要将其从您的适配器中删除,而不是从您的列表中,发布您的适配器代码,我们将能够进一步帮助您。
  • 我试图通过适配器消除,但我遇到了同样的问题..
  • 我有编辑写作 NoteAdapter

标签: android arrays android-arrayadapter


【解决方案1】:

AdapterName.this.notifyDatasetChanged();

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-03-12
    • 2020-08-03
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多