2011-10-02 77 views
0

我學習了Android的工作。我開始用聯繫人創建一個項目。 我將聯繫人插入到SQLite數據庫中,然後將它們從數據庫中放入並在ListView中顯示它們。沒關係。但我想點擊列表中的項目,然後編輯項目。因此,我需要以某種方式獲取該項目的ID並使用它...我不知道它是否清楚...正如您所看到的,在onItemClick()函數中,正在運行一個新的活動......而在新的活動中,我需要該項目的ID才能使用它。如何從數據庫獲取ID到ListView

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

對不起,我錯....我已經清醒24小時,在開發Android應用程序 –

+0

工作這從您好Android的鏈接可以幫助你:[NewsDroid RSS(HTTP://www.helloandroid .com/tutorials/newsdroid-rss-reader) – SamSPICA

+1

減少咖啡和睡眠可能會對你有所幫助 – Merlin

回答

0

公共無效onItemClick(適配器視圖爲arg0,ARG1觀,詮釋ARG2,長ARG3){

 startActivity(new Intent("net.johnyho.cz.EDITOVATKONTAKT"));  
    } 

您好,我不知道你有什麼application.but的列名,例如ID是你的主鍵標識符,然後將光標移動到arg2位置並獲取_id的值,然後將其傳遞給startActivity,它將起作用。首先應用SQLiteOpenHelper類,其易於使用然後應用此。

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,傳遞到您的活動的onContextItemSelected方法的菜單項的對象也將返回正確的行ID。

@Override 
public boolean onContextItemSelected(MenuItem item) 
{ 
    AdapterContextMenuInfo info = (AdapterContextMenuInfo) item.getMenuInfo(); 
    long rowId = info.id; 
    // do something with the id 
} 
+0

你能提供info.getDataarrayList嗎? – Mikey

相關問題