我学习使用Android。我开始用Contacts创建一个项目。 我将联系人插入SQLite数据库,然后我将它们从数据库中放入并在ListView中显示它们。没关系。但我想点击列表中的项目然后编辑项目。因此,我需要以某种方式得到项目的ID并使用它...我不知道它是否清楚......正如你所看到的,在函数onItemClick()中,有一个新的活动...在新活动中,我需要项目的ID才能使用它。
public class ContactList extends Activity {
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.seznam_kontaktu2);
SQLInsert info = new SQLInsert(this);
info.open();
ArrayList<String> data = info.getDataArrayList(); //It returns Array of "Lastname, Name" which is shown in the List
info.close();
ListView lv1 = (ListView) findViewById(R.id.ListView01);
lv1.setAdapter (new ArrayAdapter<String>(this, android.R.layout.simple_list_item_1, data));
lv1.setOnItemClickListener(new OnItemClickListener() {
public void onItemClick(AdapterView<?> arg0, View arg1, int arg2, long arg3) {
startActivity(new Intent("net.johnyho.cz.EDITOVATKONTAKT"));
}
});
}
答案 0 :(得分:1)
对我有用的一个选项是创建自定义ArrayAdapter类以及自定义AdapterItem类。我们将id存储在AdapterItem上,并使用我们的自定义ArrayAdapter返回它。
MyAdapterItem可能看起来像......
public class MyAdapterItem implements Comparable
{
public String name;
public long rowId;
public MyAdapterItem()
{
rowId = -1L;
name = "";
}
public MyAdapterItem(long _rowId, String _name)
{
rowId = _rowId;
name = _name;
}
public int compareTo( Object o )
{
return toString().compareTo(o.toString());
}
public String toString()
{
return name;
}
}
我们的自定义ArrayAdapter,MyAdapter,然后覆盖getItemId()。它读取并返回存储的行id(假设它正在使用MyAdapterItem的元素)。 ArrayAdapter上的其他方法将继续使用我们的自定义类 - 列表使用toString方法进行显示,并通过提供compareTo方法,列表知道如何对值进行排序。
public class MyAdapter<MyAdapterItem> extends ArrayAdapter
{
public MyAdapter(Context context, int resourceId)
{
super(context, resourceId);
}
@Override
public long getItemId( int position )
{
MyAdapterItem item = (MyAdapterItem)this.getItem(position);
return item.rowId;
}
}
回到Activity的onCreate,OnItemClickListener现在在“id”参数中提供了正确的行id。
未显示的是info.getDataArrayList()的新实现 - 必须修改它以创建新的MyAdapterItem对象而不是简单的字符串。
ArrayList<MyAdapterItem> data = info.getDataArrayList();
ListView lv1 = (ListView) findViewById(R.id.ListView01);
lv1.setAdapter( new MyAdapter<MyAdapterItem>(this, android.R.layout.simple_list_item_1, data) );
lv1.setOnItemClickListener(new OnItemClickListener() {
public void onItemClick(AdapterView<?> arg0, View view, int position, long id)
{
// do whatever - the value in "id" is supplied by getRowId on our adapter
}
});
此外,如果将上下文菜单附加到ListView,则传递到Activity的onContextItemSelected方法的MenuItem对象也将返回正确的行ID。
@Override
public boolean onContextItemSelected(MenuItem item)
{
AdapterContextMenuInfo info = (AdapterContextMenuInfo) item.getMenuInfo();
long rowId = info.id;
// do something with the id
}
答案 1 :(得分:0)
public void onItemClick(AdapterView arg0,View arg1,int arg2,long arg3){
startActivity(new Intent("net.johnyho.cz.EDITOVATKONTAKT"));
}
您好我不知道您的应用程序的列名是什么。但是例如id是您的主键标识符然后将光标移动到arg2 postion并获取_id的值然后将其传递给startActivity它将工作。第一件事应用SQLiteOpenHelper类它易于使用然后应用它。