0

所以我对这个 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)

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

4

2 回答 2

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

希望这可以帮助!

于 2012-04-09T14:05:53.283 回答
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;
}
于 2012-04-09T12:38:46.693 回答