美文网首页Android开发Android知识Android技术知识
点击listview时得到item中的数据的方式

点击listview时得到item中的数据的方式

作者: sakurajiang | 来源:发表于2016-09-21 11:40 被阅读4287次

    我将数据库的数据显示在listview上时,想通过长按listview显示菜单,菜单中包含删除和更新操作,通过长按listview显示菜单,可以通过复写
    onCreateContextMenu()onContextItemSelected()方法来实现,这个很简单,在这里就不赘述了,重点在于当我们进行删除操作时,如何删除
    这一项,也就是我们需要得到这个item中的数据,比如id,这个id是数据库的id,而不是itemid,这两个是不相同的,因为当我们删除其中的某
    一个item时,itemid和数据库的id就会不同。那么我们如何得到数据库的id呢?这里提供五种种方法:
    方法一:让listview设置监听器,这里需要提一下,我们最好是设置长按监听器,不然的话,你点击一下,得到了id,然后还要再长按一次,得到菜单,
    因为长按只会触发OnItemLongClickListener,不会触发OnItemClickListener,当然你可以让OnItemLongClickListener返回的是false,这样就不会拦截事件了,但是只需要设置一个监听器岂不是更好,所以最好设置长按监听器。然后在其中写入如下代码:
    View v=myListView.getChildAt(position);
    TextView t=(TextView) v.findViewById(R.id.myTextView1);
    itemid=t.getText().toString();
    其中的第一行是得到listview中的item的布局,我这里是自定义的布局,用的是linearLayout,这里得到的也就是lineadlayout,第二行是得到
    用于显示id的控件,我这里是用的TextView,它的id就是R.id.myTextView1,如果你使用的是系统的布局,那么你的对应的id就是android.R.i d.text1,然后第三行就不用解释了,这样就得到了数据库中的id,当然你还可以得到别的很多数据。
    方法二:
    listview设置监听器,然后用到游标,在监听器中加入如下代码:
    String sql="select userid from user";
    cursor=sqLiteDatabase.rawQuery(sql, null);
    cursor.moveToPosition(position);
    int id2=cursor.getInt(cursor.getColumnIndex("userid"));
    这样就得到了这些你所点击的item中的数据库id
    方法三:
    listview设置监听器,然后写入如下代码:
    HashMap<String, String> h1= (HashMap<String, String>) parent.getItemAtPosition(position);
    h1.get("userid");
    这个方法第一行代码得到的是每一个item的值,注意是item的值,这里的itemHashMap结构的。这与第一中方法不同,第一种方法的第一行代码是得到item的布局
    第二行代码是取值,因为是HashMap结构的,所以采用这个方式取值,其中"userid"是键。
    方法四:
    不设置监听器,在onContextItemSelected()方法中写入代码:
    AdapterView.AdapterContextMenuInfo info=(AdapterView.AdapterContextMenuInfo) item.getMenuInfo();
    int q=(int) info.id;
    Log.i("Logcat", "q="+q);
    View v1= myListView.getChildAt(q);
    TextView t2=(TextView) v1.findViewById(R.id.myTextView1);
    String st=t2.getText().toString();
    这样的到的st就是你的itemid了。
    方法五:不设置监听器,在onContextItemSelected()方法中写入代码:
    AdapterView.AdapterContextMenuInfo info=(AdapterView.AdapterContextMenuInfo) item.getMenuInfo();
    String sql="select userid from user";
    cursor=sqLiteDatabase.rawQuery(sql, null);
    cursor.moveToPosition((int) info.id);
    int id2=cursor.getInt(cursor.getColumnIndex("_id")); 这样就得到了这些你所点击的item中的数据库id。看上述的代码,就会发现这个和方法二类似,方法二的position`就是这里的(int) info.id,
    这个方法比方法二更简单,因为不用设置监听器。这个方法最简单。

    相关文章

      网友评论

        本文标题:点击listview时得到item中的数据的方式

        本文链接:https://www.haomeiwen.com/subject/yokaettx.html