經過多次嘗試獲得自定義適配器的工作我幾乎在那裏。現在我還有一個問題:在適配器中獲取數據。這就是我所做的。如何將數據發送到我的自定義適配器
我有一個CustomListAdapter
類的適配器,sqLiteHelper
類CRUD數據和mainActivity
類。在主活動我加載像這樣的自定義列表:
ListView list;
CustomListAdapter adapter;
public MainActivity CustomListView = null;
public ArrayList<Players> CustomListViewValuesArr = new ArrayList<Players>();
//button handlers newmatch_players_home
public void addSpelerNu(View button) {
Log.d("WedstrijdID buiten de create", ""+wedstrijdId);
Log.d("id return team thuis", ""+thuisTeamId);
//thuisteam
final EditText shirtNummer = (EditText) findViewById(R.id.shirtThuis);
String nummerShirt = shirtNummer.getText().toString();
int shirtSpeler = Integer.parseInt(nummerShirt);
final EditText spelerNaam = (EditText) findViewById(R.id.naamThuis);
String naamSpeler = spelerNaam.getText().toString();
Integer wedstrijdSpelerId = (int) (long) wedstrijdId;
SqLiteHelper db = new SqLiteHelper(this);
db.addSpeler(new Players(shirtSpeler, naamSpeler, thuisTeamId, wedstrijdSpelerId));
Log.d("Toevoegen speler THUIS", ">> BEGIN");
Log.d("Toevoegen speler", "Shirt = "+nummerShirt+" Naam = "+naamSpeler +" Team ="+thuisTeamId+" Wedstrijd ="+wedstrijdSpelerId);
Log.d("Toevoegen speler", ">> EIND");
shirtNummer.setText(null);
spelerNaam.setText(null);
CustomListView = this;
/******** Take some data in Arraylist (CustomListViewValuesArr) ***********/
ArrayList <Players> CustomListViewValuesArr = new ArrayList<Players>();
Resources res =getResources();
list= (ListView)findViewById(R.id.listHome);
/**************** Create Custom Adapter *********/
adapter=new CustomListAdapter(CustomListView, CustomListViewValuesArr);
list.setAdapter(adapter);
}
這適用於數據除外。我想使用的數據是在我sqlitehelper
public ArrayList<Players> getPlayersForTeam(int teamNumber,int matchNumber) {
ArrayList<Players> speler = new ArrayList<Players>();
String query = "SELECT * FROM " + TABLE_SPELERS + " WHERE team=? AND wedstrijd =?";
SQLiteDatabase db = this.getWritableDatabase();
String[] selectionArgs = new String[] { Integer.toString(teamNumber), Integer.toString(matchNumber) };
Cursor cursor = db.rawQuery(query, selectionArgs);
Players spelers = null;
if (cursor.moveToFirst()) {
do {
spelers = new Players();
spelers.setIdSpeler(Integer.parseInt(cursor.getString(0)));
spelers.setShirt(Integer.parseInt(cursor.getString(1)));
spelers.setSpeler(cursor.getString(2));
spelers.setTeam(Integer.parseInt(cursor.getString(3)));
spelers.setSpelerWedstrijd(Integer.parseInt(cursor.getString(4)));
speler.add(spelers);
} while (cursor.moveToNext());
}
Log.d("Alle spelers in DB for team:" + teamNumber, speler.toString());
// return wedstrijden
return speler;
}
如果我加載像這樣
List <Players> list = new ArrayList<Players>();
list=db.getPlayersForTeam(thuisTeamId,wedstrijdSpelerId);
這個數據我會看到在logcat中的log.d。但我無法將這些數據存入我的CustomListViewValuesArr
。
我該怎麼辦?
這是customListAdapter
類
package com.jd.wedstrijdkaart;
import java.util.ArrayList;
import android.app.Activity;
import android.content.Context;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;
import android.widget.BaseAdapter;
import android.widget.TextView;
public class CustomListAdapter extends BaseAdapter {
/*********** Declare Used Variables *********/
private Activity activity;
private ArrayList data;
private static LayoutInflater inflater=null;
Players tempValues=null;
int i=0;
/************* CustomAdapter Constructor
* @return *****************/
public CustomListAdapter(Activity a, ArrayList d) {
/********** Take passed values **********/
activity = a;
data=d;
/*********** Layout inflator to call external xml layout() ***********/
inflater = (LayoutInflater)activity.
getSystemService(Context.LAYOUT_INFLATER_SERVICE);
}
/******** What is the size of Passed Arraylist Size ************/
public int getCount() {
if(data.size()<=0)
return 1;
return data.size();
}
public Object getItem(int position) {
return position;
}
public long getItemId(int position) {
return position;
}
/********* Create a holder Class to contain inflated xml file elements *********/
public static class ViewHolder{
public TextView shirt;
public TextView name;
}
/****** Depends upon data size called for each row , Create each ListView row *****/
public View getView(int position, View convertView, ViewGroup parent) {
View vi = convertView;
ViewHolder holder;
if(convertView==null){
/****** Inflate tabitem.xml file for each row (Defined below) *******/
vi = inflater.inflate(R.layout.adapter_players, null);
/****** View Holder Object to contain tabitem.xml file elements ******/
holder = new ViewHolder();
holder.shirt = (TextView) vi.findViewById(R.id.shirt);
holder.name=(TextView)vi.findViewById(R.id.name);
/************ Set holder with LayoutInflater ************/
vi.setTag(holder);
}
else
holder=(ViewHolder)vi.getTag();
if(data.size()<=0)
{
holder.name.setText("No Data");
}
else
{
/***** Get each Model object from Arraylist ********/
tempValues = null;
tempValues = (Players) data.get(position);
/************ Set Model values in Holder elements ***********/
holder.shirt.setText(tempValues.getShirt());
holder.name.setText(tempValues.getSpeler());
}
return vi;
}
}
你可以發佈整個addSpelerNu方法或更好的整個活動類 – Gooziec
完成。我使用addSpelerNu作爲按鈕 –
的onClick事件,因爲我可以看到你只是在適配器的構造函數 – Gooziec