2015-07-10 72 views
-3

我有一個Listview其項目從SQLite數據庫填充。我已使用CursorAdapter類將數據庫中的值設置爲ListView項。一切安好。但我使用刪除查詢來刪除使用OnItemLongClick從數據庫中選擇的項目。它也可以。現在我的問題是我的ListView刪除後Item不刷新。我也試過adapter.notifyDataSetChanged()。但沒有運氣。我在這裏提供了我的代碼。請任何人幫忙。謝謝。如何刪除它的一些項目後刷新ListView?

我其中包含ListView活動是

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

    databaseHelper = new DatabaseHelper(this); 
    bikeList = (ListView) findViewById(R.id.listView2); 
    tvCount = (TextView) findViewById(R.id.textView133); 

    bikeList.setOnItemClickListener(new AdapterView.OnItemClickListener() { 
     @Override 
     public void onItemClick(AdapterView<?> parent, View view, int position, long id) { 

      TextView textSrNo = (TextView) view.findViewById(R.id.textView29); 
      srNo = textSrNo.getText().toString(); 

      String selectQuery = "select * from bikeTable where uSerialNo='" + srNo + "'"; 
      SQLiteDatabase db = databaseHelper.getReadableDatabase(); 
      Cursor cursor = db.rawQuery(selectQuery, null); 
      cursor.moveToFirst(); 
      String strUser = cursor.getString(1); 
      String strMobile = cursor.getString(2); 
      String strAddress = cursor.getString(3); 
      String strSerialNo = cursor.getString(4); 
      String strImei = cursor.getString(5); 
      String strCimi = cursor.getString(6); 
      String strDeviceNo = cursor.getString(7); 
      String strDealerCode = cursor.getString(8); 
      String strDealerContact = cursor.getString(9); 

      cursor.close(); 

      String strTest = strUser + "#" + strMobile + "#" + strAddress + "#" + strSerialNo + "#" + strImei + "#" + strCimi + "#" + strDeviceNo + "#" + strDealerCode + "#" + strDealerContact + "#"; 

      Bundle bundle = new Bundle(); 
      bundle.putString("details", strTest); 
      Intent bikeIntent = new Intent(TableBikeActivity.this, BikeReport.class); 
      bikeIntent.putExtras(bundle); 
      startActivity(bikeIntent); 
     } 
    }); 

    int[] colors = {Color.parseColor("#D3D3D3"), Color.parseColor("#D3D3D3"), Color.parseColor("#D3D3D3")}; 
    bikeList.setDivider(new GradientDrawable(GradientDrawable.Orientation.RIGHT_LEFT, colors)); 

    new Handler().post(new Runnable() { 
     @Override 
     public void run() { 
      adapter = new DisplayAdapter(TableBikeActivity.this, databaseHelper.getAllDataBike()); 
      bikeList.setAdapter(adapter); 
      tvCount.setText(String.valueOf(bikeList.getAdapter().getCount())); 
     } 
    }); 

    search = (ImageButton) findViewById(R.id.imageView13); 

    myFilter = (AutoCompleteTextView) findViewById(R.id.editText2); 

    search.setOnClickListener(new View.OnClickListener() { 
     @Override 
     public void onClick(View v) { 
      final String strFilter = myFilter.getText().toString(); 

      new Handler().post(new Runnable() { 
       @Override 
       public void run() { 
        if (strFilter.equals("")) { 
         Toast.makeText(TableBikeActivity.this, "Please Enter Valid Serial No.", Toast.LENGTH_SHORT).show(); 
         adapter = new DisplayAdapter(TableBikeActivity.this, databaseHelper.getAllDataBike()); 
         bikeList.setAdapter(adapter); 
         tvCount.setText(String.valueOf(bikeList.getAdapter().getCount())); 
        } else { 
         adapter1 = new SearchDisplayAdapter(TableBikeActivity.this, databaseHelper.searchCustomerBike(strFilter)); 
         bikeList.setAdapter(adapter1); 
         tvCount.setText(String.valueOf(bikeList.getAdapter().getCount())); 
        } 
       } 
      }); 
     } 
    }); 

    myFilter.addTextChangedListener(new TextWatcher() { 
     @Override 
     public void beforeTextChanged(CharSequence s, int start, int count, int after) { 

     } 

     @Override 
     public void onTextChanged(CharSequence s, int start, int before, int count) { 
      final String strFilter = myFilter.getText().toString(); 

      new Handler().post(new Runnable() { 
       @Override 
       public void run() { 
        if (strFilter.equals("")) { 
         adapter = new DisplayAdapter(TableBikeActivity.this, databaseHelper.getAllDataBike()); 
         bikeList.setAdapter(adapter); 
         tvCount.setText(String.valueOf(bikeList.getAdapter().getCount())); 
        } else { 
         adapter1 = new SearchDisplayAdapter(TableBikeActivity.this, databaseHelper.searchCustomerBike(strFilter)); 
         bikeList.setAdapter(adapter1); 
         tvCount.setText(String.valueOf(bikeList.getAdapter().getCount())); 
        } 
       } 
      }); 
     } 

     @Override 
     public void afterTextChanged(Editable s) { 

     } 
    }); 

    radioFilter = (RadioGroup) findViewById(R.id.radioFilter); 

    radioFilter.setOnCheckedChangeListener(new RadioGroup.OnCheckedChangeListener() { 
     @Override 
     public void onCheckedChanged(RadioGroup group, int checkedId) { 
      if (checkedId == R.id.radioAll) { 

       new Handler().post(new Runnable() { 
        @Override 
        public void run() { 
         adapter = new DisplayAdapter(TableBikeActivity.this, databaseHelper.getAllDataBike()); 
         bikeList.setAdapter(adapter); 
         tvCount.setText(String.valueOf(bikeList.getAdapter().getCount())); 
        } 
       }); 

      } else if (checkedId == R.id.radioActivated) { 

       new Handler().post(new Runnable() { 
        @Override 
        public void run() { 
         adapter = new DisplayAdapter(TableBikeActivity.this, databaseHelper.getActivated()); 
         bikeList.setAdapter(adapter); 
         tvCount.setText(String.valueOf(bikeList.getAdapter().getCount())); 
        } 
       }); 

      } else if (checkedId == R.id.radioNotActivated) { 

       new Handler().post(new Runnable() { 
        @Override 
        public void run() { 
         adapter = new DisplayAdapter(TableBikeActivity.this, databaseHelper.getNotActivated()); 
         bikeList.setAdapter(adapter); 
         tvCount.setText(String.valueOf(bikeList.getAdapter().getCount())); 
        } 
       }); 
      } 
     } 
    }); 

    final DatabaseHelper databaseHelper = new DatabaseHelper(this); 
    SQLiteDatabase db = databaseHelper.getReadableDatabase(); 
    String query = "select rowid _id,* from bikeTable where vehicleType='Two Wheeler'"; 
    Cursor cursor = db.rawQuery(query, null); 
    String strArray[] = new String[cursor.getCount()]; 
    int i = 0; 
    if (cursor.getCount() > 0) { 
     while (cursor.moveToNext()) { 
      String serial = cursor.getString(cursor.getColumnIndex("uSerialNo")); 
      strArray[i] = serial; 
      i++; 
      ArrayAdapter<String> adapter = new ArrayAdapter<String>(this, android.R.layout.simple_dropdown_item_1line, strArray); 
      myFilter.setThreshold(1); 
      myFilter.setAdapter(adapter); 
     } 
    } else { 
     Toast.makeText(TableBikeActivity.this, "Error", Toast.LENGTH_SHORT).show(); 
    } 

    bikeList.setOnItemLongClickListener(new AdapterView.OnItemLongClickListener() { 
     @Override 
     public boolean onItemLongClick(AdapterView<?> parent, final View view, final int position, long id) { 
      AlertDialog.Builder alertBuilder=new AlertDialog.Builder(TableBikeActivity.this); 
      alertBuilder.setTitle("Options").setCancelable(true); 
      alertBuilder.setMessage("Delete Record"); 
      alertBuilder.setNeutralButton("Delete Selected Item", new DialogInterface.OnClickListener() { 
       @Override 
       public void onClick(DialogInterface dialog, int which) { 
        TextView textSrNo1 = (TextView) view.findViewById(R.id.textView29); 
        srNum=textSrNo1.getText().toString(); 
        showDialogDelete(); 
       } 
      }); 
      AlertDialog alert=alertBuilder.create(); 
      alert.show(); 
      return true; 
     } 
    }); 
} 

private void showDialogDelete() { 
    final AlertDialog.Builder alertBuilder = new AlertDialog.Builder(this); 
    LayoutInflater inflater = this.getLayoutInflater(); 
    View dialogView = inflater.inflate(R.layout.delete_dialog, null); 
    alertBuilder.setView(dialogView); 
    final AlertDialog alertDialog = alertBuilder.create(); 
    alertDialog.getWindow().setBackgroundDrawable(new ColorDrawable(android.R.color.transparent)); 
    alertDialog.setCancelable(true); 
    alertDialog.show(); 

    final Button btnNo=(Button)alertDialog.findViewById(R.id.btnNo); 
    btnNo.setOnClickListener(new View.OnClickListener() { 
     @Override 
     public void onClick(View v) { 
      alertDialog.dismiss(); 
     } 
    }); 

    Button btnYes=(Button)alertDialog.findViewById(R.id.btnYes); 
    btnYes.setOnClickListener(new View.OnClickListener() { 
     @Override 
     public void onClick(View v) { 
      try{ 

       databaseHelper=new DatabaseHelper(TableBikeActivity.this); 
       SQLiteDatabase database=databaseHelper.getWritableDatabase(); 

       long delete=database.delete("bikeTable","uSerialNo='"+srNum+"'",null); 

       if (delete!=-1){ 
        Toast.makeText(TableBikeActivity.this,"Deleted Successfully",Toast.LENGTH_SHORT).show(); 
       }else { 
        Toast.makeText(TableBikeActivity.this,"Deletion Effed",Toast.LENGTH_SHORT).show(); 
       } 
       alertDialog.dismiss(); 
       bikeList.setAdapter(adapter); 
       adapter.notifyDataSetChanged(); 

      }catch (SQLiteException e){ 
       e.printStackTrace(); 
       Toast.makeText(TableBikeActivity.this,"Deletion Failed",Toast.LENGTH_SHORT).show(); 
      } 
     } 
    }); 

} 

CursorAdapter類是

public class DisplayAdapter extends CursorAdapter { 

    DatabaseHelper databaseHelper; 

    @SuppressWarnings("deprecation") 
    public DisplayAdapter(Context context,Cursor c){ 
     super(context,c); 
    } 

    @Override 
    public View newView(Context context, Cursor cursor, ViewGroup parent) { 
     LayoutInflater inflater = LayoutInflater.from(parent.getContext()); 
     View retView = inflater.inflate(R.layout.card_items, parent, false); 

     return retView; 
    } 

    @Override 
    public void bindView(final View view, final Context context, final Cursor cursor) { 
     TextView tvUserName=(TextView)view.findViewById(R.id.textView27); 
     tvUserName.setText(cursor.getString(2)); 

     TextView tvMobile=(TextView)view.findViewById(R.id.textView28); 
     tvMobile.setText(cursor.getString(3)); 

     final TextView tvSerial=(TextView)view.findViewById(R.id.textView29); 
     tvSerial.setText(cursor.getString(5)); 
    } 
} 
+0

FSM救救我們! ...這個代碼是FUBAR ....你爲每個遊標的行創建一個新的適配器...只是閱讀一些關於developers.android.com的指南... @pskink,而我喜歡ContentProviders ...這個例子中的用法是不好(這是舊的:使用ListActivity,不使用Loaders API :)) – Selvin

+0

@Selvin'CursorLoaders'不使用'ContentProviders'?怎麼來的? – pskink

+0

沒有...在他們沒有使用CursorLoaders的例子中...雖然ContentProvider的實現仍然有效...使用不是... – Selvin

回答

0

加入adapter.getCursor().requery();解決了這個問題。

相關問題