2014-01-16 136 views
0

好吧,我搜索扔在這裏,根本沒有找到我的答案。我的Android應用程序假設要做的是從我的php服務器上獲取一個列表,然後將它存儲在手機上的數據庫中。這一切都有效,我甚至可以用我的sqlite數據庫中的信息創建一個列表視圖。當我被困在一個新的編碼器試圖找出如何顯示信息,當他們點擊列表視圖項目,將帶他們到另一個頁面,將顯示該列表視圖的所有細節。sqlite數據庫和列表視圖

所以總之,我想要的是我的列表視圖,例如項目1,項目2,項目3,然後當他們點擊項目2時,它獲取項目2的信息並顯示它。有人能指出我正確的方向,我知道我必須使用setOnClickListener,但只是不確定如何使它看起來特定的項目。

public class Events extends Activity 
{ 
// Identifies a particular Loader being used in this component 
String event_name, event_time, event_price, event_loc; 
static JSONObject object =null; 

DBAdapter myDb; 

@Override 
protected void onCreate(Bundle savedInstanceState) 
{ 
    super.onCreate(savedInstanceState); 
    setContentView(R.layout.events); 

    openDB(); 
    new PrefetchData().execute(); 

    // used to refresh my page. 
    Button button = (Button) findViewById(R.id.refresh); 

    button.setOnClickListener(new OnClickListener() 
    { 
     public void onClick(View v) 
     { 
      openDB(); 
      new PrefetchData().execute(); 
     } 
    }); 
} 

@Override 
protected void onDestroy() 
{ 
    super.onDestroy(); 
    closeDB(); 
} 

private void openDB() 
{ 
    myDb = new DBAdapter(this); 
    myDb.open(); 
} 
private void closeDB() 
{ 
    myDb.close(); 
} 

private class PrefetchData extends AsyncTask<Void, Void, Void> 
{ 

    @Override 
    protected void onPreExecute() 
    { 
     super.onPreExecute();  
    } 

    @Override 
    protected Void doInBackground(Void... arg0) 
    { 
     myDb.deleteAll(); 
     JsonParser jsonParser = new JsonParser(); 
     String json = jsonParser.getJSONFromUrl("http://www.website.com/test.json"); 

     Log.e("JSON Response: ", "> " + json); 

     if (json != null) 
     { 
      try 
      { 
       JSONObject parent = new JSONObject(json); 
       JSONArray eventDetails = parent.getJSONArray("event"); 

       for(int i=0; i < eventDetails.length(); i++) 
       { 
        object = eventDetails.getJSONObject(i); 
        event_name = object.getString("event_name"); 
        event_time = object.getString("event_time"); 
        event_price = object.getString("event_price"); 
        event_loc = object.getString("event_loc"); 
        //event_pic = object.getString("event_pic"); 

        myDb.insertRow(event_name,event_time,event_price,event_loc); 

        Log.e("JSON", "> " + event_name + event_time + event_price + event_loc); 
       } 
      } catch (JSONException e) 
       { 
       // TODO Auto-generated catch block 
       Log.e("Json Error", "Error: " + e.toString()); 
        e.printStackTrace(); 
       } 
     } 

     return null; 
    } 

    @Override 
    protected void onPostExecute(Void result) 
    {   
     super.onPostExecute(result); 
     populateListViewFromDB(); 
     myDb.close(); 
     // After completing http call 
     // will close this activity and lauch main activity 
     //Intent i = new Intent(MainActivity.this, Events.class); 
     //i.putExtra("event_name", event_name); 
     //i.putExtra("event_time", event_time); 
     //i.putExtra("event_price", event_price); 
     //startActivity(i); 

     // close this activity 
     //finish(); 
    } 

} 

@SuppressWarnings("deprecation") 
private void populateListViewFromDB() 
{ 
    Cursor cursor = myDb.getAllRows(); 

    // Allow activity to manage lifetime of the cursor. 
    // DEPRECATED! Runs on the UI thread, OK for small/short queries. 
    startManagingCursor(cursor); 

    // Setup mapping from cursor to view fields: 
    String[] fromFieldNames = new String[] 
      {DBAdapter.KEY_NAME, DBAdapter.KEY_TIME, DBAdapter.KEY_PRICE, DBAdapter.KEY_LOC}; 
    int[] toViewIDs = new int[] 
      {R.id.item_name};//,  R.id.item_time};//,   R.id.item_price,  R.id.item_loc}; 

    // Create adapter to may columns of the DB onto elemesnt in the UI. 
    SimpleCursorAdapter myCursorAdapter = 
      new SimpleCursorAdapter(
        this,  // Context 
        R.layout.item_layout, // Row layout template 
        cursor,     // cursor (set of DB records to map) 
        fromFieldNames,   // DB Column names 
        toViewIDs    // View IDs to put information in 
        ); 

    // Set the adapter for the list view 
    ListView myList = (ListView) findViewById(R.id.listViewfordb); 
    myList.setAdapter(myCursorAdapter); 
} 

} 

回答

0

D不要使用setOnClickListener。 一定要使用CursorAdapter並在你的數據庫中指定一個ID列。 當您自動設置protected void onListItemClick(ListView l, View v, int position, long id)時,id是數據庫中的ID。這樣你可以通過一個intent來傳遞它,並使用id從db中獲取數據。

希望它很清楚。對不起,我在匆忙

相當寫在代碼中只需添加

myList.setOnItemClickListener(
     new OnItemClickListener() 
     { 
      @Override 
      public void onItemClick(AdapterView<?> arg0, View view, 
        int position, long id) { 

         //here the id value is what you need to take data from the db filtering by id 
       } 
      } 
    ); 
+0

我想我有點明白你的意思..我用光標..這是我爲它的代碼。請查看我編輯的代碼,用於從我的數據庫中獲取信息。 – Jayce

+0

好的,找出那個地方。我如何獲得信息傳遞給下一個活動? Intent intent = new Intent(getBaseContext(),ListInfo.class); \t intent.putExtra(「ID」,position); \t startActivity(intent); – Jayce

+0

你應該通過身份證,而不是位置到下一個活動。 一旦你完成了,你可以使用ID來查詢你的數據庫並獲取數據 –

0

你應該設置監聽到你的ListView像這樣

private OnItemClickListener onListItemClickListener = new OnItemClickListener() { 

    @Override 
    public void onItemClick(AdapterView<?> adapter, View view, int position, long id) { 
     // TODO YOUR CODE 
    } 
}; 

private OnItemLongClickListener onItemLongClickListener = new OnItemLongClickListener() { 

    @Override 
    public boolean onItemLongClick(AdapterView<?> adapter, View view, int position, long id) { 
     YOUR_CODE 
    } 
}; 

這是兩個類型,longClicj,只需點擊,你可以用它兩個或一個,它取決於你的需要

也onCreate方法,你應該設置收聽者列表查看

listView.setOnItemClickListener(onListItemClickListener); 
listView.setOnItemLongClickListener(onItemLongClickListener); 
相關問題