I have 50 list item in the list. Now i have checked 10 item, so how to this 10 checked item delete(remove) from the listview when I click delete button.
Here is My Code
Please see my code and response where is the error:
public class BookmarksJokes extends Activity implements OnClickListener,
OnItemClickListener {
ListView lv;
Button btn_delete;
public String TAG = "horror";
private SQLiteDatabase db;
public static final String PREFS_NAME = "MyPreferences";
static String[] tempTitle = new String[100];
static String[] tempBody = new String[100];
private static boolean bRequiresResponse;
private static class EfficientAdapter extends BaseAdapter {
private LayoutInflater mInflater;
public EfficientAdapter(Context context) {
mInflater = LayoutInflater.from(context);
}
public int getCount() {
return tempTitle.length;
}
public Object getItem(int position) {
return position;
}
public long getItemId(int position) {
return position;
}
public View getView(int position, View convertView, ViewGroup parent) {
ViewHolder holder;
if (convertView == null) {
convertView = mInflater.inflate(R.layout.bookmarks_list_item,
null);
holder = new ViewHolder();
holder.text1 = (TextView) convertView
.findViewById(R.id.title);
holder.text2 = (TextView) convertView
.findViewById(R.id.body);
holder.checkBox = (CheckBox) convertView.findViewById(R.id.checkbox);
convertView.setTag(holder);
} else {
holder = (ViewHolder) convertView.getTag();
}
holder.text1.setText(tempTitle[position]);
holder.text2.setText(tempBody[position]);
// bRequiresResponse = checkBox.isChecked();
return convertView;
}
static class ViewHolder {
TextView text1;
TextView text2;
CheckBox checkBox;
}
}
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.bokmarksjoks);
try {
db = (new DatabaseHelper(this)).getWritableDatabase();
} catch (IOException e) {
e.printStackTrace();
}
setUpViews();
title = (TextView) findViewById(R.id.body);
SharedPreferences pref = getSharedPreferences(PREFS_NAME, 0);
//String ids = pref.getString("jid", "");
String one = pref.getString("title", "");
String two = pref.getString("body", "");
tempTitle = one.split(",");
tempBody = two.split(",");
lv.setAdapter(new EfficientAdapter(this));
}
private void setUpViews() {
lv = (ListView) findViewById(R.id.list);
btn_delete = (Button) findViewById(R.id.delete);
btn_delete.setOnClickListener(this);
// checkbox = (CheckBox) findViewById(R.id.checkbox);
}
private void removeData(){
//int pos= getIntent().getIntExtra("POSITION", 0);
//lv.removeViewAt(pos);
// notifyAll();*/
// int pos= getIntent().getIntExtra("POSITION", 0);
// if(checkBox.isChecked()){
// Log.d(TAG, " checked d]"+pos);
// Toast.makeText(this, "checked "+pos, Toast.LENGTH_SHORT).show();
// }
}
public void onClick(View v) {
switch (v.getId()) {
case R.id.delete:
AlertDialog.Builder alt_bld = new AlertDialog.Builder(this);
alt_bld.setMessage("Are you Sure want to delete all checked jok ?")
.setCancelable(false)
.setPositiveButton("Yes",
new DialogInterface.OnClickListener() {
public void onClick(DialogInterface dialog,
int id) {
//removeJok();
}
})
.setNegativeButton("No",
new DialogInterface.OnClickListener() {
public void onClick(DialogInterface dialog,
int id) {
dialog.cancel();
}
});
AlertDialog alert = alt_bld.create();
alert.setTitle("Delete Jokes");
alert.show();
case R.id.checkbox:
default:
break;
}
}
public void onItemClick(AdapterView<?> arg0, View view, int position,
long ids) {
try {
// checkBox = (CheckBox)view.findViewById(R.id.checkbox);
// checkBox.setChecked(true);
Intent intent = new Intent(BookmarksJokes.this,
BookmarkJokesDetails.class);
intent.putExtra("POSITION", position);
intent.putExtra("ID", ids);
Cursor cursor = (Cursor) adapter.getItem(position);
intent.putExtra("_ID",
cursor.getInt(cursor.getColumnIndex("_id")));
startActivity(intent);
} catch (Exception e) {
e.printStackTrace();
}
Toast.makeText(BookmarksJokes.this,
"Item in position " + position + " clicked", Toast.LENGTH_LONG)
.show();
}
}
Here is my full code:
http://pastebin.com/LB2WKHMP
I performed the same task in one of my app.
What you should do is use an ArrayList having the same size as the list item and each item contains 0 by default . Now in your Efficient Adapter for each checkbox that is checked , assign 1 in that particular position in arrayList . Finally on the button click of delete , traverse through the ArrayList and delete all those item from list which contain 1 in that postion in that ArrayList and atLast call notifyDatasetChanged() method of list so that list get refreshed and shows the new list.
Here is some sample code to give you a better idea over this :
ArrayList<Integer> checks=new ArrayList<Integer>();
Now in onCreate method
for(int b=0;b<tempTitle.length;b++){
checks.add(b,0); //assign 0 by default in each position of ArrayList
}
Now in your efficientAdapter's getView method
public View getView(int position, View convertView, ViewGroup parent) {
ViewHolder holder;
if (convertView == null) {
convertView = mInflater.inflate(R.layout.bookmarks_list_item,
null);
holder = new ViewHolder();
holder.text1 = (TextView) convertView
.findViewById(R.id.title);
holder.text2 = (TextView) convertView
.findViewById(R.id.body);
holder.checkBox = (CheckBox) convertView.findViewById(R.id.checkbox);
convertView.setTag(holder);
} else {
holder = (ViewHolder) convertView.getTag();
}
holder.checkBox.setOnClickListener(new OnClickListener() {
public void onClick(View v) {
// TODO Auto-generated method stub
if(((CheckBox)v).isChecked()){
checks.set(position, 1);
}
else{
checks.set(position, 0);
}
}
});
return convertView;
}
Finally on delete Button click :
delete.setOnClickListener(new OnClickListener() {
public void onClick(View v) {
// TODO Auto-generated method stub
for(int i=0;i<checks.size();i++){
if(checks.get(i)==1){
//remove items from the list here for example from ArryList
checks.remove(i);
//similarly remove other items from the list from that particular postion
i--;
}
}
((EfficientAdapter)lv.getAdapter()).notifyDataSetChanged();
}
}
Hope this will solve your issue.
I am assuming i got ids which are selected. now simply arrayList.remove(position); and call notifyDataSetChanged();
If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!
Donate Us With