【问题标题】:Set row id of listview as primary key column from database in android将listview的行ID设置为android中数据库的主键列
【发布时间】:2015-03-17 12:17:56
【问题描述】:

我在 android 中有一个列表视图,当我选择任何行时,它会显示数据库中的数据列表,它显示被点击的数据,但我想要该数据的主键 ID 而不是数据 ListView 应该显示列表 bt onclick 它应该获取所点击数据的主键 id

  public void onClick(View v) {

                 Cursor c = db.rawQuery("SELECT * FROM Deltas", null);
                    values=new ArrayList<String>();
                  while(c.moveToNext()){
                       String uname = c.getString(c.getColumnIndex("delta"));
                       if(uname!="")
                       values.add(uname);
                       System.out.println("data"+uname);
                    }

      //fetch all data one by one


       ArrayAdapter<String> adapter = new ArrayAdapter<String>(this,
              android.R.layout.simple_list_item_activated_1, values);
             listView.setAdapter(adapter);
}

这就是我创建列表视图的方法,如何将主键 ID 标记到列表视图中的行

【问题讨论】:

  • 您需要一个自定义适配器。
  • 我想显示所选行表中的主键 ID
  • @jv 帮帮我

标签: android sqlite listview android-listview cursor


【解决方案1】:

您将需要构建一个自定义适配器。试试这个:

public class CustomAdapter extends BaseAdapter {

        private Context mContext;
        private List<Pair<Integer, String>> mData;

        public CustomAdapter(Context context, List<Pair<Integer, String>> data) {
            this.mContext = context;
            this.mData = data;
        }

        @Override
        public int getCount() {
            return mData.size();
        }

        @Override
        public Pair<Integer, String> getItem(int position) {
            return mData.get(position);
        }

        @Override
        public long getItemId(int position) {
            return position;
        }

        @Override
        public View getView(int position, View convertView, ViewGroup parent) {
            View view = convertView;

            if(view == null)
                view = LayoutInflater.from(mContext).inflate(android.R.layout.simple_list_item_activated_1, parent, false);

            String text = getItem(position).second;

            ((TextView) view).setText(text);

            return view;
        }
}

在你的活动中这样做:

 List<Pair<Integer, String>> values;

public void onClick(View v) {

             Cursor c = db.rawQuery("SELECT * FROM Deltas", null);
                values=new ArrayList<Pair<Integer, String>();
              while(c.moveToNext()){
                   String uname = c.getString(c.getColumnIndex("delta"));
                   int id = c.getInt(c.getColumnIndex("id"));
                   if(uname!="")
                   Pair<Integer, String> pair = new Pair<Integer, String>(id, uname);

                   values.add(pair);
                   System.out.println("data"+uname);
              }
              c.close();

      //fetch all data one by one
      CustomAdapter adapter = new CustomAdapter(MainActivity.this, values);
      listView.setAdapter(adapter);
   }

然后去拿你的东西:

listView.setOnItemClickListener(new AdapterView.OnItemClickListener() {
                @Override
                public void onItemClick(AdapterView<?> parent, View view, int position, long id) {
                    CustomAdapter adapter = (CustomAdapter)parent.getAdapter();
                    Pair<Integer, String> pair = adapter.getItem(position);
                    Log.e("the information you want","id:" pair.first + " name:" + pair.second);
                }
            });

【讨论】:

  • 这就是为什么我在这里:)
  • 还有一点我忘了补充:你应该关闭你的光标。
  • 用完后关闭光标是最佳做法。
  • kk thnxx 老板,我是 android 新手,有没有你的博客可以直接与您联系并提出疑问
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2015-04-04
  • 2011-06-10
  • 1970-01-01
  • 2018-10-01
  • 1970-01-01
相关资源
最近更新 更多