如何从数据库中获取ID到ListView

时间:2011-10-02 03:26:20

标签: android

我学习使用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"));    
        }
    });
}

2 个答案:

答案 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类它易于使用然后应用它。