您好我想检查所有列表视图项目并从数据库和列表视图中删除这些项目。如果选中所有列表视图项目并且未选中任何一个列表项目,则必须删除选中的项目。这个iam使用menu's.How我可以这样实现吗?我使用以下代码:
public void PopulateSentList() {
String strquery = "SELECT * FROM sent_history";
Cursor Cursor = (MainscreenActivity.JEEMAAndroSMSDB).rawQuery(strquery,
null);
MyAdapter adapter = new MyAdapter(SentHistoryActivity.this, Cursor);
setListAdapter(adapter);
lvhistory.setOnItemClickListener(new OnItemClickListener() {
@Override
public void onItemClick(AdapterView<?> arg0, View arg1,
int position, long arg3) {
// TODO Auto-generated method stub
SQLiteCursor selectedValue = (SQLiteCursor) getListAdapter()
.getItem(position);
String id1 = selectedValue.getString(0);
System.out.println("DATA-->>>" + id1);
Intent intent = new Intent(getApplicationContext(),
Historydisplay.class);
intent.putExtra("Id", id1);
final int result = 1;
startActivityForResult(intent, result);
}
});
}
public void onBackPressed() {
super.onBackPressed();
Intent intent = new Intent(SentHistoryActivity.this,
MainscreenActivity.class);
startActivity(intent);
finish();
}
private void CreateMenu(Menu menu) {
menu.setQwertyMode(true);
MenuItem mnu1 = menu.add(0, 0, 0, "Delete");
{
mnu1.setAlphabeticShortcut('a');
}
MenuItem mnu2 = menu.add(1, 1, 1, "Select All");
{
mnu2.setAlphabeticShortcut('s');
}
}
private boolean MenuChoice(MenuItem item) throws Exception {
switch (item.getItemId()) {
case 0:
if (getStrinValue != null) {
delhistory(getStrinValue);
} else {
Toast.makeText(getApplicationContext(),
"Please select an Item", Toast.LENGTH_SHORT).show();
}
case 1:
if(item.getTitle().equals("Select All")){
for(int i=0; i < lvhistory.getChildCount(); i++){
RelativeLayout itemLayout = (RelativeLayout)lvhistory.getChildAt(i);
final CheckBox cb = (CheckBox)itemLayout.findViewById(R.id.check);
cb.setChecked(true);
if (cb.isChecked() == true) {
getStrinValue = getStrinValue + ","
+ cb.getTag().toString();
}
cb.setOnCheckedChangeListener(new OnCheckedChangeListener() {
@Override
public void onCheckedChanged(CompoundButton arg0, boolean arg1) {
// TODO Auto-generated method stub
final long[] checkedIds = lvhistory.getCheckItemIds();
for (int i = 0; i < checkedIds.length; i++) {
Log.e("checkedIds", "id checked: " + checkedIds[i]);
}
}
});
}
}
}
return true;
}
@Override
public boolean onCreateOptionsMenu(Menu menu) {
super.onCreateOptionsMenu(menu);
CreateMenu(menu);
return true;
}
@Override
public boolean onOptionsItemSelected(MenuItem item) {
try {
return MenuChoice(item);
} catch (Exception e) {
e.printStackTrace();
}
return false;
}
private class MyAdapter extends ResourceCursorAdapter {
public MyAdapter(Context context, Cursor cur) {
super(context, R.layout.dummy, cur);
}
@Override
public View newView(Context context, Cursor cur, ViewGroup parent) {
LayoutInflater li = (LayoutInflater) getSystemService(Context.LAYOUT_INFLATER_SERVICE);
return li.inflate(R.layout.dummy, parent, false);
}
@Override
public void bindView(View view, Context context, Cursor cur) {
TextView tvListText = (TextView) view.findViewById(R.id.Mobile);
chkBox = (CheckBox) view.findViewById(R.id.check);
tvListText.setText(cur.getString(cur
.getColumnIndex(MainscreenActivity.COL_Mobile)));
chkBox.setTag(cur.getString(cur
.getColumnIndex(MainscreenActivity.COL_Sent_id)));
chkBox.setOnClickListener(new OnClickListener() {
@Override
public void onClick(View v) {
// TODO Auto-generated method stub
CheckBox cb = (CheckBox) v;
if (cb.isChecked() == true) {
getStrinValue = getStrinValue + ","
+ cb.getTag().toString();
} else {
getStrinValue = null;
}
}
});
}
}
public void delhistory(String getStrinValue) {
int pos1 = getStrinValue.indexOf(",");
if (pos1 > 0) {
String rowId = getStrinValue.substring(pos1 + 1);
String delimiter = "\\,";
String[] sentID = rowId.split(delimiter);
for (int i = 0; i < sentID.length; i++) {
String temp0 = sentID[i];
int id = Integer.parseInt(temp0);
MainscreenActivity.JEEMAAndroSMSDB
.delete(MainscreenActivity.Table_SentHistory, "_id="
+ id, null);
}
Toast.makeText(getApplicationContext(),
"History deleted successfully", Toast.LENGTH_SHORT)
.show();
finish();
Intent intent = new Intent(getApplicationContext(),
SentHistoryActivity.class);
startActivity(intent);
}
}
答案 0 :(得分:2)
你只需要在适配器上调用remove方法,如下面的
adapter.remove(list.get(i));
不要忘记使其无效,以便它也影响列表。
adapter.notifyDatasetChanged()
编辑: - 作为par user370305,你应该调整上面的方法使其失效...
答案 1 :(得分:0)
试用此代码: -
<强> main.xml中强>
<?xml version="1.0" encoding="utf-8"?>
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="fill_parent"
android:layout_height="fill_parent"
android:orientation="vertical" >
<EditText
android:id="@+id/txtItem"
android:layout_width="240dp"
android:layout_height="wrap_content"
android:inputType="text"
android:hint="@string/hintTxtItem"
/>
<Button
android:id="@+id/btnAdd"
android:layout_width="fill_parent"
android:layout_height="wrap_content"
android:text="@string/lblBtnAdd"
android:layout_toRightOf="@id/txtItem"
/>
<TextView
android:id="@android:id/empty"
android:layout_width="fill_parent"
android:layout_height="wrap_content"
android:layout_below="@id/txtItem"
android:text="@string/txtEmpty"
android:gravity="center_horizontal"
/>
<ListView
android:id="@android:id/list"
android:layout_width="fill_parent"
android:layout_height="wrap_content"
android:layout_below="@id/txtItem"
android:choiceMode="multipleChoice" >
</ListView>
<Button
android:id="@+id/btnDel"
android:layout_width="fill_parent"
android:layout_height="wrap_content"
android:layout_alignParentBottom="true"
android:text="@string/lblBtnDel" />
</RelativeLayout>
<强> MainActivity.java 强>
public class MainActivity extends ListActivity {
/** Items entered by the user is stored in this ArrayList variable */
ArrayList<String> list = new ArrayList<String>();
/** Declaring an ArrayAdapter to set items to ListView */
ArrayAdapter<String> adapter;
/** Called when the activity is first created. */
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
/** Setting a custom layout for the list activity */
setContentView(R.layout.main);
/** Reference to the add button of the layout main.xml */
Button btn = (Button) findViewById(R.id.btnAdd);
/** Reference to the delete button of the layout main.xml */
Button btnDel = (Button) findViewById(R.id.btnDel);
/** Defining the ArrayAdapter to set items to ListView */
adapter = new ArrayAdapter<String>(this, android.R.layout.simple_list_item_multiple_choice, list);
/** Defining a click event listener for the button "Add" */
OnClickListener listener = new OnClickListener() {
@Override
public void onClick(View v) {
EditText edit = (EditText) findViewById(R.id.txtItem);
list.add(edit.getText().toString());
edit.setText("");
adapter.notifyDataSetChanged();
}
};
/** Defining a click event listener for the button "Delete" */
OnClickListener listenerDel = new OnClickListener() {
@Override
public void onClick(View v) {
/** Getting the checked items from the listview */
SparseBooleanArray checkedItemPositions = getListView().getCheckedItemPositions();
int itemCount = getListView().getCount();
for(int i=itemCount-1; i >= 0; i--){
if(checkedItemPositions.get(i)){
adapter.remove(list.get(i));
}
}
adapter.notifyDataSetChanged();
}
};
/** Setting the event listener for the add button */
btn.setOnClickListener(listener);
/** Setting the event listener for the delete button */
btnDel.setOnClickListener(listenerDel);
/** Setting the adapter to the ListView */
setListAdapter(adapter);
}
}
答案 2 :(得分:0)
您必须使用db的查询从db中删除对象,然后您应该创建新的适配器或使用remove()方法到旧列表适配器