我试图让这个listview在长按时返回每行的sqlite db _id。
然而这一行
onItemLongClick(AdapterView<?> parent, View view, int position, long id)
返回列表中的“position”而不是id。
我已经没有想法......有人可以指出Android初学者正朝着正确的方向发展吗?
public class MySavedPlaces extends Activity {
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_my_saved_places);
//Creating a List View
ArrayList<String> listItems = new ArrayList<String>();
ArrayAdapter<String> adapter = new ArrayAdapter<String>(MySavedPlaces.this, android.R.layout.simple_list_item_1, listItems);
final ListView mylist=(ListView) findViewById(android.R.id.list);
mylist.setAdapter(adapter);
String URL = "content://com.db.place/locations";
Uri locations = Uri.parse(URL);
Cursor c = getContentResolver().query(locations, null, null, null, "name");
c.moveToFirst();
if(c!=null){
//If there are contents in the database
do{
String id=c.getString(c.getColumnIndex("_id"));
String name=c.getString(c.getColumnIndex("name"));
listItems.add(name);
}while(c.moveToNext());
}
mylist.setOnItemLongClickListener(new OnItemLongClickListener() {
@Override
public boolean onItemLongClick(AdapterView<?> parent, View view, int position, long id) {
ArrayAdapter<String> adapter = new ArrayAdapter<String>(MySavedPlaces.this, android.R.layout.simple_list_item_1);
adapter.add("Navigate...");
adapter.add("Delete");
AlertDialog.Builder builder = new AlertDialog.Builder(MySavedPlaces.this);
builder.setTitle("whatever title "+id+ " "+position+" "+view.getId());
builder.setAdapter(adapter, new DialogInterface.OnClickListener() {
public void onClick(DialogInterface dialog, int item) {
Log.d( "AlertDialog", "Positive"+item );
// item is the list item number - Navigate == 0, Delete == 1
}
});
AlertDialog alert = builder.create();
alert.show();
// Return true to consume the click event
return true;
}
});
}
答案 0 :(得分:2)
我发现你没有存储这个值:
String id=c.getString(c.getColumnIndex("_id"));
尝试创建具有id,name作为属性的对象列表,并将这些项存储在ArrayList中,以便您可以轻松地从ArrayList中获取这些项。
而不是:
ArrayAdapter<String> adapter =
new ArrayAdapter<String>(MySavedPlaces.this, android.R.layout.simple_list_item_1, listItems);
使用类似的东西:
ArrayAdapter<DataBaseRowObject> adapter =
new ArrayAdapter<DataBaseRowObject>(MySavedPlaces.this, android.R.layout.simple_list_item_1, listItems);
并在ItemLongClickListener上获取数据:
DataBaseRowObject selected = listItems.get(position);
答案 1 :(得分:0)
我认为问题在于列表适配器必须实现4个方法getcount列表中的视图数量。获取项目,特定索引列表视图中的子项。 Getview膨胀的孩子。最后但并非最不重要的是得到你需要改变的索引,因为大多数时候你不会使用数据库而人们只是把列表视图索引