所以我很喜欢这个SQLite我最终设法创建基础并使用它等等。现在我创建了ContextMenu,你将能够从listView中删除打开上下文菜单的项目。这是我目前的代码。
import java.util.List;
import java.util.Random;
import android.app.ListActivity;
import android.os.Bundle;
import android.text.Editable;
import android.view.ContextMenu;
import android.view.ContextMenu.ContextMenuInfo;
import android.view.MenuInflater;
import android.view.View;
import android.widget.AdapterView.AdapterContextMenuInfo;
import android.widget.ArrayAdapter;
import android.widget.EditText;
import android.widget.ListView;
import android.widget.Toast;
import android.view.MenuItem;
public class Ann extends ListActivity{
private CommentsDataSource datasource;
EditText edit;
ListView bump;
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.ann);
datasource = new CommentsDataSource(this);
datasource.open();
List<Comment> values = datasource.getAllComments();
ArrayAdapter<Comment> adapter = new ArrayAdapter<Comment>(this,
android.R.layout.simple_list_item_1, values);
setListAdapter(adapter);
registerForContextMenu(getListView());
}
public void onClick(View view) {
@SuppressWarnings("unchecked")
ArrayAdapter<Comment> adapter = (ArrayAdapter<Comment>) getListAdapter();
Comment comment = null;
switch (view.getId()) {
case R.id.add:
edit = (EditText)findViewById(R.id.editTxt);
Editable txt=(Editable)edit.getText();
String vnos = txt.toString();
comment = datasource.createComment(vnos);
adapter.add(comment);
edit.setText("");
break;
}
adapter.notifyDataSetChanged();
}
@Override
public void onCreateContextMenu(ContextMenu menu, View v, ContextMenuInfo menuInfo){
super.onCreateContextMenu(menu, v, menuInfo);
MenuInflater inflater = getMenuInflater();
inflater.inflate(R.menu.context_menu, menu);
}
@Override
protected void onResume() {
datasource.open();
super.onResume();
}
@Override
protected void onPause() {
datasource.close();
super.onPause();
}
}
现在我知道我需要为public boolean onContextItemSelected(MenuItem item)
但现在如何管理以删除已选择的项目。
答案 0 :(得分:1)
我可以问你为什么不使用SimpleCursorAdapter创建列表?看起来你正在获得一个光标并变成一个阵列...为什么要采取额外的步骤?如果您对数据库进行添加/删除,则可以使用requery()
方法重新生成/更新列表。
无论如何,如果您决定使用SimpleCursorAdapter,onContextItemSelected(MenuItem item)
将是您的选择。我的一个项目的一个例子:
@Override
public boolean onContextItemSelected(MenuItem item) {
AdapterContextMenuInfo info = (AdapterContextMenuInfo) item.getMenuInfo();
if (item.getTitle() == "Delete Member") {
mDbHelper.deleteMember(info.id);
mMemberCursor.requery();
return true;
}
return super.onContextItemSelected(item);
}
请注意,我以编程方式创建了菜单视图,因此您可能需要将if
语句更改为更适合您使用夸大的菜单资源进行设置的内容。
info.id
是数据库中的行ID,表示您单击的列表行。
mDbHelper.deleteMember()
是我的数据库帮助程序中用于删除记录的方法。
希望这有帮助!
答案 1 :(得分:0)
上下文菜单不是listItem特定的,即。 id不知道点击了哪个项目。
转到onItemClicked或onItemLongClick版本。
要做后者,请在您的活动上实现onItemLongClick接口
public class Ann extends ListActivity implements OnItemLongClickListener
并添加onItemLongClick方法
@Override
public boolean onItemLongClick(AdapterView<?> parent, View view, int position, long id) {
// do something with your datasource and the position
return false;
}