0

私は長い間、この問題の解決策を見つけようとしてきました。問題は、コードがリスト ビューで選択されたアイテムを削除しないことです。リストを更新すると、ログの猫に「id」の問題であると表示されます。誰かが原因を突き止めるのを手伝ってくれますか?

リスト

public class ListedesClient extends ListActivity  {

    TextView selectionc;
    public int idToModify; 
    ClientDataAdapter dm;

   String clientId;
    List<String[]> list = new ArrayList<String[]>();
    List<String[]> names2 =null ;
    ArrayList<String> stg1;
    protected void onCreate(Bundle savedInstanceState){
        super.onCreate(savedInstanceState);
        setContentView(R.layout.listeclients);
          dm = new ClientDataAdapter(this);
          names2 = dm.selectAll();

          stg1 = new ArrayList<String>();
          for (String[] name : names2) {
              stg = name[1]+"         "+name[2]+ "         "+name[3]; // error here
              stg1.add(stg);// error here two
             x++;// error here two
           }


        ArrayAdapter<String> adapter = new ArrayAdapter<String>(   
                this,android.R.layout.simple_list_item_1,   
                stg1);
        this.setListAdapter(adapter);
        selectionc=(TextView)findViewById(R.id.selectionc);

    }      

    public void onListItemClick(final ListView parent, View v, final int position, final long id) {

        selectionc.setText("Vous êtes sur : " + stg1[position]); //error here in stg1[position]

         AlertDialog.Builder builder = new AlertDialog.Builder(this)
         .setTitle("Delete Item")
         .setMessage("are you sure to delete?")
         .setPositiveButton("Yes",
                 new DialogInterface.OnClickListener() {

                     @Override
                     public void onClick(DialogInterface arg0, int arg1) {

                        // @-@ dm.delete(list.get(position));
                         dm.delete(id);

                         ArrayAdapter adapter = (ArrayAdapter)parent.getAdapter();
                         adapter.remove(stg1[position]);// same error 
                         adapter.notifyDataSetChanged();

                     }
             })
         .setNegativeButton("No",
                 new DialogInterface.OnClickListener() {

                     @Override
                     public void onClick(DialogInterface dialog,
                             int which) {
                         // TODO Auto-generated method stub
                         return;
                     }
             });
     builder.show();
    }
}

データアダプタ ...

public class ClientDataAdapter {
    private static final  String DATABASE_NAME = "clientbase.db";
    private static final int DATABASE_VERSION = 1;
    static final String TABLE_CLIENT = "clienttable";
    private static Context context;
    static SQLiteDatabase dc;
private SQLiteStatement insertStmt;

    private static final String INSERT = "insert into "
        + TABLE_CLIENT + " (nom_complet,adresse_client,numero_telephone) values (?,?,?)";

    public ClientDataAdapter(Context context) {
        ClientDataAdapter.context = context;
        OpenHelper openHelper = new OpenHelper(ClientDataAdapter.context);
        ClientDataAdapter.dc = openHelper.getWritableDatabase();
        this.insertStmt = ClientDataAdapter.dc.compileStatement(INSERT);
       }

    public long insert(String nom_complet,String adresse_client,String numero_telephone) {
        this.insertStmt.bindString(1, nom_complet);
        this.insertStmt.bindString(2, adresse_client);
        this.insertStmt.bindString(3, numero_telephone);
        return this.insertStmt.executeInsert();
    }

    public void deleteAll() {
        dc.delete(TABLE_CLIENT, null, null);
    }

    public ArrayList<String[]> selectAll()
    {

        ArrayList<String[]> list = new ArrayList<String[]>();
        Cursor cursor = dc.query(TABLE_CLIENT, new String[] { "_id","nom_complet","adresse_client","numero_telephone"},
                null, null, null, null, "nom_complet asc"); 

        int x=0;
        if (cursor.moveToFirst()) {
            do {
                String[] b1=new String[]{cursor.getString(0),cursor.getString(1),cursor.getString(2),cursor.getString(3)};

                list.add(b1);

                x=x+1;
            } while (cursor.moveToNext());
        }
        if (cursor != null && !cursor.isClosed()) {
            cursor.close();
        } 
        cursor.close();

        return list;
    }


    public boolean delete(long rowId) {

           return dc.delete(TABLE_CLIENT, BaseColumns._ID + "=" + rowId, null) > 0;

        }

    private static class OpenHelper extends SQLiteOpenHelper {

        OpenHelper(Context context) {
            super(context, DATABASE_NAME, null, DATABASE_VERSION);
        }

        @Override
        public void onCreate(SQLiteDatabase dc) {
            dc.execSQL("CREATE TABLE " + TABLE_CLIENT + " (_id INTEGER PRIMARY KEY, nom_complet TEXT NOT NULL, adresse_client TEXT NOT NULL, numero_telephone TEXT NOT NULL)");
        }

        @Override
        public void onUpgrade(SQLiteDatabase dc, int oldVersion, int newVersion) {
            dc.execSQL("DROP TABLE IF EXISTS " + TABLE_CLIENT);
            onCreate(dc);
        }
    }


}
4

2 に答える 2

2

_id を列として使用していますが、使用していません。あなたの作成クエリは

 @Override
 public void onCreate(SQLiteDatabase dc) {
        dc.execSQL("CREATE TABLE " + TABLE_CLIENT + " (id INTEGER PRIMARY KEY, nom_complet TEXT NOT NULL, adresse_client TEXT NOT NULL, numero_telephone TEXT NOT NULL)");
 }

または onCreate ( idfor _id)内のクエリを変更するかid、削除クエリで使用します

public void onListItemClick(final ListView parent, View v, final int position, final long id) {

    selectionc.setText("Vous êtes sur : " + stg1[position]);

     AlertDialog.Builder builder = new AlertDialog.Builder(this)
     .setTitle("Delete Item")
     .setMessage("are you sure to delete?")
     .setPositiveButton("Yes",
             new DialogInterface.OnClickListener() {

                 @Override
                 public void onClick(DialogInterface arg0, int arg1) {

                    // @-@ dm.delete(list.get(position));
                     dm.delete(id);

                     ArrayAdapter adapter = (ArrayAdapter)parent.getAdapter();
                     adapter.remove(stg1.get(position));
                     adapter.notifyDataSetChanged();

                 }
         })

ArrayAdapter に送信する代わりに、String[] に ArrayList を渡します。

 int x = 0;
 String stg = "";
 stg1 = new ArrayList<String>();
 for (String[] name : names2) {
     stg = name[1]+"         "+name[2]+ "         "+name[3];
     stg1.add(stg);
     x++;
  }

もちろん stg1 は ArrayList でなければなりません

于 2013-06-08T13:30:21.553 に答える
0

AbstractListItereatorは削除をサポートしていません。

で繰り返している間、そのリストを変更することはできません for(:)。興味深いアイテムまたはそのインデックスを別のリストに保存し、反復が完了したら削除します。

于 2013-06-08T14:18:46.057 に答える