首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 移动开发 > Android >

如何得到listview长按事件中按的是哪个条目?用这个方法不行

2012-09-09 
怎么得到listview长按事件中按的是哪个条目?用这个方法不行啊在处理android中listview的长按事件中,我需要

怎么得到listview长按事件中按的是哪个条目?用这个方法不行啊
在处理android中listview的长按事件中,我需要知道长按的是哪个条目,用了网上的一个方法,理应成功,却没有成功,贴出来请教一下各位高手,从setOnCreateContextMenuListener开始往下看就行

Java code
package com.example.myktvlist;import java.util.ArrayList;import java.util.HashMap;import android.app.Activity;import android.content.ContentValues;import android.database.Cursor;import android.database.sqlite.SQLiteDatabase;import android.os.Bundle;import android.text.TextUtils;import android.view.ContextMenu;import android.view.ContextMenu.ContextMenuInfo;import android.view.MenuItem;import android.view.View;import android.view.View.OnCreateContextMenuListener;import android.widget.AdapterView;import android.widget.AdapterView.AdapterContextMenuInfo;import android.widget.AdapterView.OnItemLongClickListener;import android.widget.AdapterView.OnItemClickListener;import android.widget.ListView;import android.widget.SimpleAdapter;import android.widget.TextView;import android.widget.Toast;public class ListActivity extends Activity{    //private String songName;    //private String singerName;    protected static final int COMFIRM = 0;    public void onCreate(Bundle savedInstanceState) {        final int CONFIRM = 1;         System.out.println("step into listActivity");        super.onCreate(savedInstanceState);        setContentView(R.layout.my_list_view);        final ListView list = (ListView)findViewById(R.id.MyListView);         ArrayList<HashMap<String, String>> mylist = new ArrayList<HashMap<String, String>>();        DatabaseHelper dbHelper = new DatabaseHelper(ListActivity.this,"songList");        SQLiteDatabase db = dbHelper.getReadableDatabase();        Cursor cursor = db.query("user", new String[]{"songName","singerName"}, "id=?",new String[]{"1"},null,null, null);        System.out.println("query complete");        cursor.moveToFirst();        if(cursor.isFirst())            System.out.println("moveToFirst complete");        do{            System.out.println("step into while");            String songName = cursor.getString(cursor.getColumnIndex("songName"));            String singerName = cursor.getString(cursor.getColumnIndex("singerName"));            //如果是多项数据怎么办呢?            System.out.println("getData complete");               HashMap<String, String> map = new HashMap<String, String>();            map.put("songName",songName);            map.put("singerName",singerName);            System.out.println("putData complete");            mylist.add(map);            System.out.println("addData complete");            //System.out.println("query--->" + name);            System.out.println(singerName);        }while(cursor.moveToNext());        SimpleAdapter mSchedule = new SimpleAdapter(this, //没什么解释                mylist,//数据来源                 R.layout.my_list_item,//ListItem的XML实现                //动态数组与ListItem对应的子项                        new String[] {"songName", "singerName"},                 //ListItem的XML文件里面的两个TextView ID                new int[] {R.id.songName,R.id.singerName});                //添加并且显示        list.setAdapter(mSchedule);                list.setOnCreateContextMenuListener(new OnCreateContextMenuListener(){            public void onCreateContextMenu(ContextMenu menu, View arg1,ContextMenuInfo arg2) {                menu.setHeaderTitle(R.string.contentMenu);                menu.add(0, COMFIRM, 6,R.string.confirm);                menu.add(1,1,5,"hah");            }        });        list.setOnItemLongClickListener(new OnItemLongClickListener() {            public boolean onItemLongClick(AdapterView<?> ada, View view,                    int index, long longIndex) {                list.showContextMenu();                return true;            }        });        list.setOnItemClickListener(new OnItemClickListener(){            //Toast t=Toast.makeText(this, "长按删除该曲目", Toast.LENGTH_LONG);            //t.show();            public void onItemClick(AdapterView<?> arg0, View arg1, int arg2,                    long arg3) {                // TODO Auto-generated method stub                        }        });        db.close();    }        //怎么在这个函数知道选择的是哪个条目?    public boolean onContextItemSelected(MenuItem item) {        AdapterContextMenuInfo info = (AdapterContextMenuInfo) item                .getMenuInfo();        // info.targetView得到list.xml中的LinearLayout对象.        System.out.println("item = " + item);        System.out.println("info = " + info);        String songName = ((TextView) info.targetView.findViewById(R.id.songName)) //R.id.confirm                .getText().toString();        System.out.println("songName is");        System.out.println(songName);        if (!TextUtils.isEmpty(songName)) {            if(item.getItemId() == COMFIRM) {                DatabaseHelper dbHelper = new DatabaseHelper(ListActivity.this,"songList");                SQLiteDatabase db = dbHelper.getWritableDatabase();                ContentValues values = new ContentValues();                db.delete("user","songName",new String[]{"chen"});            }        }        return false;    }} 



功能是长按listview中的条目,显示“确实删除吗?”的菜单,在点击“确认”之后会删除所选的条目。
但是我用onContextItemSelected这个函数中的item中用AdapterContextMenuInfo info = (AdapterContextMenuInfo) item.getMenuInfo();得到的info用System.out.print得到的却是null,这导致运行错误,怎么解决呢?

[解决办法]
setOnItemLongClickListener这个才是长按啊

热点排行