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,这导致运行错误,怎么解决呢?
4 个解决方案
#1
setOnItemLongClickListener这个才是长按啊
#2
是啊是啊,这个函数写的对不?不知道为什么,没有取到相应的item
#3
好像找到错误之处了,是setOnItemLongClickListener要return false,这个函数returne false和true的区别在于啥?
#4
return false的意思是将长按事件传递给其他视图
return true的意思中止传递。
#1
setOnItemLongClickListener这个才是长按啊
#2
是啊是啊,这个函数写的对不?不知道为什么,没有取到相应的item
#3
好像找到错误之处了,是setOnItemLongClickListener要return false,这个函数returne false和true的区别在于啥?
#4
return false的意思是将长按事件传递给其他视图
return true的意思中止传递。