2014-07-11 122 views
-3

我不知道如何做到這一點...請幫助! 我已經將所有設置都設置爲現在添加運動員姓名,年齡,層級和日期添加到數據庫。我希望將這些運動員添加到列表視圖中,並且能夠點擊該名稱以打開稍後將創建的另一個活動。我主要只是想從數據庫中將這些名稱添加到列表視圖中,但不知道如何。我試圖使用適配器,但沒有成功。Android:如何在ListView中顯示數據庫數據?

public void onClick_btnDisplayList(View view) { 
    // What do I put in this to display what is in my database 
} 

onCreate方法:

DatabaseHandler db = new DatabaseHandler(this); 
ListView listView; 

@Override 
public void onCreate(Bundle savedInstanceState) { 
    super.onCreate(savedInstanceState); 
    setContentView(R.layout.activity_add_user); 

    listView = (ListView) findViewById(R.id.listView); 


} 

添加到數據庫的方法:

所有你需要爲此創建一個 定義適配器
public void onClick_btnAddAthlete(View view) { 
    DatabaseHandler db = new DatabaseHandler(this); 
    EditText editName = (EditText) findViewById(R.id.editName); 


    Log.d("Insert: ", "Inserting .."); 
    db.addContact(new Athlete("Ravi", "20", "2", "10/12/13")); 
    db.addContact(new Athlete("Srinivas", "23", "4", "4/2/12")); 
    db.addContact(new Athlete("Tommy", "43", "1", "7/11/14")); 
    db.addContact(new Athlete("Karthik", "6", "3", "1/3/12")); 

    // Reading all contacts 
    Log.d("Reading: ", "Reading all contacts.."); 
    List<Athlete> athletes = db.getAllAthletes(); 

    for (Athlete cn : athletes) { 
     String log = "Id: " + cn.getID() + " ,Name: " + cn.getName() + " ,Phone: " + cn.getAge() + 
       " ,Tier: " + cn.getTier() + " ,Date: " + cn.getDate(); 
     // Writing Contacts to log 
     Log.d("Name: ", log); 
    } 
} 
+0

你說使用陣列適配器不起作用?什麼不起作用?因爲這對我來說似乎是最好的解決方案。 – RScottCarson

+0

我99%確定你必須使用適配器與ListViews。我會建議創建一個適配器類並使用它。當我有機會時,我可以嘗試打字。 – zgc7009

+0

我該怎麼做? – user3830363

回答

0
  1. 第一。
  2. 然後,你需要查詢數據庫用於獲取記錄。(使用AsyncTask
  3. 創建Athlete類的ArrayList和存儲從那裏分貝值。
  4. 最後將此列表設置爲您的自定義適配器。

Creating a Custom Adapter

0

我將在此更延長一些,當我得到一個機會,但

public class MyCustomAdapter extends BaseAdapter{ 

    private Context context; 
    private List<Athlete> athletes; 

    public MyCustomAdapter(Context context, List athletes){ 
     this.context = context; 
     this.athletes = athletes; 
    } 

    @Override 
    public int getCount(){ 
     return athletes.size(); 
    } 

    @Override 
    public Athlete getItem(int position){ 
     return athletes.get(position); 
    } 

    @Override 
    public int getItemId(int position){ 
     return position; 
    } 

    @Override 
    public void getView(int position, View convertView, ViewGroup parent){ 
     LayoutInflater inflater = (LayoutInflater) context.getSystemService(Context.LAYOUT_INFLATER_SERVICE); 

     convertView = inflater.inflate(R.layout.list_item_layout_name, parent, false); 

     // Get views with something like 
     // TextView text = (TextView) convertView.findViewById(R.id.text_view_name); 

     Athlete currAthlete = getItem(position); 

     // Do what you want with your athlete, like 
     // text.setText(currAthlete.getName()); 
    } 
} 

然後在你的活動

listView.setAdapter(new MyCustomAdapter(this, athletes)); 

這不是一個完整的答案,但對於評論太長了,我現在沒有時間來完成它。它應該給你一個如何使用適配器的想法。

0

你在這裏要求的實際上是一個完整的應用程序。我的意思不是嚇唬你,但你需要退後一步,記得面向對象編程(OOP):

  • 你需要一個運動員類與所有你想要顯示的運動員的數據;你似乎已經有了。太好了。

  • 您需要一個從數據庫中獲取數據到ArrayList的類:ArrayList<Athlete> mAthletes;因此,這個類應該有一個從db中獲取數據的方法。在這種方法中,您需要一個匿名asyncTask,它將爲您填充mAthlete字段。稱這個類爲AthleteLoader。運動員裝載者應該擴展Observable,以便在數據加載時告訴Activity。根據您的設計,您的活動類應在onCreateonResume內調用此方法。你也可能希望在方法中放置一個檢查,以便它只在ArrayList爲空時查詢數據庫。再次,你根據你的設計來決定。

  • 在您的Activity類中,您需要實現Observer,以便當數據從AthleteLoader準備就緒時,您可以撥打notifyObservers()來廣播信息。

  • 在您的活動類中,在update方法內(由於Observer),通過在適配器上調用notifyDataSetChanged將數據傳遞給適配器。

  • 在適配器內部,您需要從班級AthleteLoader中獲取每個運動員。有很多方法可以做到這一點。一種方法是簡單地將mAthletes放在適配器中,放在AthleteLoader中。所以,當數據存在時,它就在那裏(原諒重言式,但在這裏我假設你理解OOP和java中的指針)。這樣從活動到notifyDataSetChanged的呼叫就足夠了。

  • 此外,適配器應該擴展基本適配器,以便所有方法都使用mAthletes填充。因此,例如,getItem應該簡單地return mAthletes.get(location);

如果你是一個真正的新手,這絕對是一個很大的信息。但是,你再次要求這個簡單的問題提供很多幫助。祝你好運,我希望你能用這份名單來指導你的追求。

相關問題