0

我试图让这个列表视图在长按时返回每一行的 sqlite db _id。

然而这条线

onItemLongClick(AdapterView<?> parent, View view, int position, long id)

正在返回列表中的“位置”而不是 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;
          }

        });
}
4

2 回答 2

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);
于 2013-09-27T00:04:33.163 回答
0

我认为问题出在列表适配器上,它必须实现 4 个方法 getcount 列表中的视图数。获取项目,特定索引列表视图的子项。Getview the inflated child.and 最后但并非最不重要的是获取您需要更改的索引,因为大多数时候您不会使用数据库并且人们只是放置 listview 索引

于 2013-09-27T00:49:57.183 回答