更新到 Android 中的 table 会导致显示的记录重复

Updating to a table in Android results in duplication of shown records

在 Android 工作,我在从内部数据库中提取的选项卡上有一个 table。在另一个选项卡上输入数据后,我希望更新 table 以显示新记录。 目前我正在调用以下内容,

public void createDataTable(View v) {
    DBAdapter msdb= new DBAdapter(getActivity().getApplicationContext(),MainActivity.szDbName, null);
    db=msdb.getWritableDatabase();

    Cursor c=db.rawQuery("SELECT * FROM surveyDB", null);
    Integer iRowid = c.getColumnIndex("_id");
    Integer iSpecies = c.getColumnIndex("species");
    Integer iCount = c.getColumnIndex("surveycount");
    
    if(c.getCount()>0){
        c.moveToFirst();
        do{
            //row=new TableRow(this.getActivity());
            final TableRow row=new TableRow(this.getActivity());
            row.setClickable(true);
            //Setting up the first column parameters
            tvRowid=new TextView(getActivity());
            tvRowid.setText(c.getString(iRowid));
            row.addView(tvRowid);

            //Setting up the second column parameters
            tvSpecies=new TextView(getActivity());
            tvSpecies.setText(c.getString(iSpecies));
            tvSpecies.setTextAppearance(getActivity(), R.style.myStyle);
            tvSpecies.setGravity(Gravity.RIGHT);
            row.addView(tvSpecies); //adding column to row

            //Setting up third column parameters
            tvSurveyCount=new TextView(getActivity());
            tvSurveyCount.setText(c.getString(iCount));
            tvSurveyCount.setTextAppearance(getActivity(), R.style.myStyle);
            tvSurveyCount.setPadding(4, 1, 4, 1);
            tvSurveyCount.setGravity(Gravity.RIGHT);
            row.addView(tvSurveyCount);

        tableLayout.addView(row,new TableLayout.LayoutParams(
                    android.view.ViewGroup.LayoutParams.WRAP_CONTENT,
                    android.view.ViewGroup.LayoutParams.WRAP_CONTENT));
   }while(c.moveToNext());
        c.close();
        db.close();
    }else{
        Toast.makeText(getActivity().getApplicationContext(), "The table is empty. Please add data.", Toast.LENGTH_LONG).show();
    }
}

但是,这会导致记录重复,如下所示。 创建三个记录:七只狗、五只猫和 15 只长尾小鹦鹉显示以下 table、

Rowid Species Count
   1    dog     7   
   1    dog     7
   2    cat     5
   1    dog     7
   2    cat     5
   3    parakeet 15

即使数据库中的记录是正确的(没有重复)。基本上 table 被重新创建了三次,数据库内容附加到选项卡上的现有记录。

问题:如何从数据库中调用刷新选项卡上的 table 从数据库中的记录以反映添加的记录,以及对以前记录的更新?提前致谢。

如果您每次调用 createDataTable 时都继续向 TableLayout 添加行,而没有清除您在之前调用 createDataTable 时添加的行,那么您将受到这种影响。

解决方法是在createDataTable

开头调用tableLayout.removeAllViews()