将列表视图的行 ID 设置为 android 中数据库的主键列
Set row id of listview as primary key column from database in android
我在 android 中有一个列表视图,当我 select 任何行时它显示来自数据库的数据列表它显示被点击的数据但我想要该数据的主键 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 标记为列表视图中的行
您将需要构建自定义适配器。试试这个:
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;
}
}
在您的 activity 上执行此操作:
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);
}
});
我在 android 中有一个列表视图,当我 select 任何行时它显示来自数据库的数据列表它显示被点击的数据但我想要该数据的主键 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 标记为列表视图中的行
您将需要构建自定义适配器。试试这个:
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;
}
}
在您的 activity 上执行此操作:
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);
}
});