Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/android/221.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Android 使用ContextMenu从base中删除_Android - Fatal编程技术网

Android 使用ContextMenu从base中删除

Android 使用ContextMenu从base中删除,android,Android,所以我对这个SQLite很陌生,我最终设法创建了base并使用它,等等。现在我创建了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.Con

所以我对这个SQLite很陌生,我最终设法创建了base并使用它,等等。现在我创建了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();
    }

}
import java.util.List;
导入java.util.Random;
导入android.app.ListActivity;
导入android.os.Bundle;
导入android.text.Editable;
导入android.view.ContextMenu;
导入android.view.ContextMenu.ContextMenuInfo;
导入android.view.MenuInflater;
导入android.view.view;
导入android.widget.AdapterView.AdapterContextMenuInfo;
导入android.widget.ArrayAdapter;
导入android.widget.EditText;
导入android.widget.ListView;
导入android.widget.Toast;
导入android.view.MenuItem;
公共类活动{
私有评论数据源;
编辑文本编辑;
列表视图凹凸;
@凌驾
创建时的公共void(Bundle savedInstanceState){
super.onCreate(savedInstanceState);
setContentView(R.layout.ann);
数据源=新注释数据源(此);
datasource.open();
列表值=datasource.getAllComments();
ArrayAdapter=新的ArrayAdapter(此,
android.R.layout.simple_list_item_1,值);
setListAdapter(适配器);
registerForContextMenu(getListView());
}
公共void onClick(视图){
@抑制警告(“未选中”)
ArrayAdapter=(ArrayAdapter)getListAdapter();
注释=null;
开关(view.getId()){
案例R.id.add:
edit=(EditText)findViewById(R.id.editTxt);
可编辑txt=(可编辑)edit.getText();
字符串vnos=txt.toString();
comment=datasource.createComment(vnos);
添加(注释);
edit.setText(“”);
打破
}
adapter.notifyDataSetChanged();
}
@凌驾
public void onCreateContextMenu(ContextMenu菜单、视图v、ContextMenuInfo菜单信息){
super.onCreateContextMenu(menu,v,menuInfo);
MenuInflater充气机=getMenuInflater();
充气机。充气(右菜单。上下文菜单,菜单);
}
@凌驾
受保护的void onResume(){
datasource.open();
super.onResume();
}
@凌驾
受保护的void onPause(){
datasource.close();
super.onPause();
}
}
现在我知道我需要为
public boolean onContextItemSelected(MenuItem项)


但是现在如何管理删除选中的项目。

上下文菜单不是特定于列表项目的,即id不知道单击了哪个项目

选择OnItemClick或onItemLongClick版本

要执行后者,请在活动上实现onItemLongClick界面

公共类Ann扩展ListActivity实现OnItemLongClickListener

并添加长单击方法

@Override
public boolean onItemLongClick(AdapterView<?> parent, View view, int position, long id) {
    // do something with your datasource and the position
    return false;
}
@覆盖
公共布尔值长单击(AdapterView父项、视图、整型位置、长id){
//对你的数据源和职位做点什么
返回false;
}

我可以问一下为什么不使用SimpleCorsorAdapter来创建列表吗?看起来你得到了一个光标,变成了一个数组。。。为什么要多走一步?如果对数据库进行添加/删除,只需使用
requery()
方法重新生成/更新列表,这一点非常有用

无论如何,如果您决定使用SimpleCorsOrAdapter,那么,
onContextItemSelected(MenuItem项)
将是最佳选择。我的一个项目中的一个示例:

@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()
是我的数据库帮助程序中用于删除记录的方法

希望这有帮助