Android ListView 长按如何获取item的主键并操作对应数据库元组

============问题描述============

我做的是一个租房管理系统,大概是现在在对房子操作这个界面,我现在是要长按listView中的某一个Item,要求实现修改和删除功能。

This is my house_setting.xml document

<?xml version="1.0" encoding="utf-8"?>

<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"

android:layout_width="fill_parent"

android:layout_height="fill_parent"

android:orientation="vertical"

android:layout_gravity="center"

android:id="@+id/ll_houseSetting"

>

<Button

android:id="@+id/buildingHouse"

android:layout_width="fill_parent"

android:layout_height="wrap_content"

android:textColor="#FFFFFF"

android:textSize="25sp"

android:background="#1C1C1C"

android:gravity="center"

android:text="添加新住房" />

<ListView

android:id="@+id/houseSettingList"

android:layout_width="match_parent"

android:layout_height="match_parent"

>

</ListView>

</LinearLayout>

This is my houseActivity.java document

package com.example.ren;

import java.util.ArrayList;

import java.util.HashMap;

import java.util.Map;

import android.content.ContentUris;

import android.content.Context;

import java.util.List;

import db.RentingDB;

import db.houseSettingDB;

import entity.house;

import android.app.Activity;

import android.app.AlertDialog;

import android.net.Uri;

import android.os.AsyncTask;

import android.os.Bundle;

import android.widget.ArrayAdapter;

import android.widget.ListView;

import android.support.v7.app.ActionBarActivity;

import android.support.v7.app.ActionBar;

import android.support.v4.app.Fragment;

import android.text.TextUtils;

import android.util.Log;

import android.content.Intent;

import android.database.sqlite.SQLiteDatabase;

import android.os.Bundle;

import android.view.ContextMenu;

import android.view.ContextMenu.ContextMenuInfo;

import android.view.KeyEvent;

import android.view.LayoutInflater;

import android.view.Menu;

import android.view.MenuItem;

import android.view.View;

import android.view.View.OnClickListener;

import android.view.ViewGroup;

import android.view.Window;

import android.view.WindowManager;

import android.widget.Button;

import android.os.Build;

import android.content.Context;

import android.database.Cursor;

import android.graphics.Color;

import android.os.Bundle;

import android.view.Menu;

import android.view.MenuItem;

import android.view.View;

import android.view.ViewGroup;

import android.widget.AdapterView;

import android.widget.AdapterView.AdapterContextMenuInfo;

import android.widget.BaseAdapter;

import android.widget.EditText;

import android.widget.LinearLayout;

import android.widget.ListView;

import android.widget.TextView;

import android.widget.Toast;

public class houseSettingActivity extends ActionBarActivity {

private ListView houseSettingList;

private List<house> houses;

private static final int ITEM_MODIFY = 1;

private static final int ITEM_DELETE = 2;

private houseSettingDB hDB;

private MyAdapter adapter;

private Cursor cursor;

private SQLiteDatabase  db = null;

private Context context;

@Override

public boolean onKeyDown(int keyCode, KeyEvent event) {

if (keyCode == KeyEvent.KEYCODE_BACK && event.getRepeatCount() == 0) {

Intent intent = new Intent(houseSettingActivity.this,

settingActivity.class);

startActivity(intent);

return true;

}

return super.onKeyDown(keyCode, event);

}

protected void onCreate(Bundle savedInstanceState) {

super.onCreate(savedInstanceState);

setContentView(R.layout.house_setting);

Button btnBuildingHouse = (Button) findViewById(R.id.buildingHouse);

btnBuildingHouse.setOnClickListener(new OnClickListener() {

public void onClick(View v) {

Intent intent = new Intent(houseSettingActivity.this,

houseBuildingActivity.class);

startActivity(intent);

}

});

hDB= new houseSettingDB(this);

houses = hDB.findAll();

ListView houseSettingList = (ListView) findViewById(R.id.houseSettingList);

adapter=new MyAdapter();

houseSettingList.setAdapter(adapter);

registerForContextMenu(houseSettingList);

}

private class MyAdapter extends BaseAdapter {

/**

* listview总数

*/

@Override

public int getCount() {

return houses.size();

}

@Override

public Object getItem(int arg0) {

// TODO Auto-generated method stub

return null;

}

@Override

public long getItemId(int arg0) {

// TODO Auto-generated method stub

return 0;

}

@Override

public View getView(int position, View convertView, ViewGroup parent) {

// TODO Auto-generated method stub

TextView tv = new TextView(getApplicationContext());

tv.setTextSize(20);

tv.setTextColor(Color.BLUE);

house house = houses.get(position);

tv.setText(house.toString());

return tv;

}

}

// 长按时显示的菜单

@Override

public void onCreateContextMenu(ContextMenu menu, View v,

ContextMenuInfo menuInfo) {

menu.setHeaderTitle("请选择操作");

menu.add(0, ITEM_MODIFY, 0, "编辑");

menu.add(0, ITEM_DELETE, 1, "删除");

}

public boolean onContextItemSelected(MenuItem item) {

AdapterContextMenuInfo info = (AdapterContextMenuInfo) item

.getMenuInfo();

int index = (int)info.id;

//  Object itemValue = adapter.getItem(info.position);

switch (item.getItemId()) {

case ITEM_MODIFY:

break;

case ITEM_DELETE:

String[] str = {String.valueOf(index)};

db= (new RentingDB (getApplicationContext())).getWritableDatabase();

db.delete("house","RecNo=?",str);

cursor.requery();

break;

default:

return super.onContextItemSelected(item);

}

return true;

}

}

I hope someone strong enough to solve my problem.If some problem on understanding my request , please make a comment on me . I will response as soon as possible

============解决方案1============

先从 houses 里删除掉那个数据,然后使用 adapter.notifyDataChanged 提示 Adapter 更新数据

时间: 2024-10-13 16:21:36

Android ListView 长按如何获取item的主键并操作对应数据库元组的相关文章

Android ListView 长按列表弹出菜单

Android ListView 长按列表弹出菜单 设置长按菜单 listView.setOnCreateContextMenuListener(new View.OnCreateContextMenuListener() { @Override public void onCreateContextMenu(ContextMenu menu, View v, ContextMenuInfo menuInfo) { menu.add(0, 0, 0, "删除单号"); menu.add

mybatis 添加事物后 无法获取自增主键的问题

检查代码后没发现mapper文件设置自增主键返回的问题,后来检查到,关闭事务后,执行完是可以获取返回的主键的, 我在mysql的客户端里关闭自动提交,发现使用select last_insert_id() 也是可以正确获取最新主键的, 我意识到可能是mybatis配置的问题. 问同事后发现了问题,将 defaultExecutorType 从 BATCH 改为 SIMPLE 即可. 1 <?xml version="1.0" encoding="UTF-8"

SpringJDBC jdbcTemplate获取自增主键

String sql = "insert into notice_type(typeName,configType,state,creatorID,corpID,createTime) values (?,?,?,?,?,?)"; Object[] objs = new Object[]{ noticeType.getTypename(), noticeType.getConfigtype(), noticeType.getState(), noticeType.getCreatori

MyBatis插入及查询获取自增主键二选一的方法

MyBatis 3.2.6插入时候获取自增主键方法有二种 以MySQL5.5为例: 方法1: <insert id="insert" parameterType="Person" useGeneratedKeys="true" keyProperty="id">        insert into person(name,pswd) values(#{name},#{pswd})    </insert&g

MyBatis 插入时候获取自增主键(1:写sql。2:注解@generatedvalue)

MyBatis 插入时候获取自增主键 方法有二 方法1: <insert id="insert" parameterType="Person" useGeneratedKeys="true" keyProperty="id">        insert into person(name,pswd) values(#{name},#{pswd})    </insert> 方法2: <insert

MyBatis插入时候获取自增主键方法

MyBatis 3.2.6插入时候获取自增主键方法有二 以MySQL5.5为例: 方法1: <insert id="insert" parameterType="Person" useGeneratedKeys="true" keyProperty="id">         insert into person(name,pswd) values(#{name},#{pswd})     </insert&

mysql 获取自增主键

MyBatis 3.2.6插入时候获取自增主键方法有二 以MySQL5.5为例: 方法1: <insert id="insert" parameterType="Person" useGeneratedKeys="true" keyProperty="id"> insert into person(name,pswd) values(#{name},#{pswd}) </insert> 方法2: <

(转)MYSQL获取自增主键【4种方法】

通过JDBC2.0提供的insertRow()方式 通过JDBC3.0提供的getGeneratedKeys()方式 通过SQL select LAST_INSERT_ID()函数 通过SQL @@IDENTITY 变量 1. 通过JDBC2.0提供的insertRow()方式 自jdbc2.0以来,可以通过下面的方式执行. [java] view plain copy print? Statement stmt = null; ResultSet rs = null; try { stmt =

oracle 如何获取表的主键列名,如何获取表的所有列名

获取表的主键列名 SQL  select   *   from   user_cons_columns     where   constraint_name   =   (select   constraint_name   from   user_constraints                 where   table_name   =   'BST_FAVORITE'  and   constraint_type   ='P'); 记住:表名要大写执行试试,该表所有主键都查出来了