删除其中一些项目后如何刷新ListView?

时间:2015-07-10 12:55:27

标签: android sqlite listview android-listview

我有一个Listview,其项目是从SQLite数据库中填充的。我使用CursorAdapter类将数据库中的值设置为ListView项。一切都好。但我使用删除查询使用OnItemLongClick从数据库中删除所选项目。它也有效。现在我的问题是删除ListView后我的Item没有刷新。我也试过了adapter.notifyDataSetChanged()。但没有运气。我在这里提供了我的代码。请任何人帮忙。谢谢。

我的包含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));
    }
}

1 个答案:

答案 0 :(得分:0)

添加adapter.getCursor().requery();解决了这个问题。