我尝试在我的代码中获取自定义适配器。我跟着一个教程,但有一些错误。构造函数在自定义适配器中未定义
这是我CustomListAdapter类:
package com.jd.wedstrijdkaart;
import java.util.ArrayList;
import android.app.Activity;
import android.content.Context;
import android.content.res.Resources;
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;
public Resources res;
Players tempValues=null;
int i=0;
/************* CustomAdapter Constructor
* @return *****************/
public void CustomAdapter(Activity a, ArrayList d,Resources resLocal) {
/********** Take passed values **********/
activity = a;
data=d;
res = resLocal;
/*********** 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());
/******** Set Item Click Listner for LayoutInflater for each row *******/
}
return vi;
}
}
我的队员类:
package com.jd.wedstrijdkaart;
import android.util.Log;
public class Players
{
private int shirtNummer;
private String spelerNaam;
private int spelerTeam;
private int wedstrijdSpeler;
private int idSpeler;
public Players(){}
public Players(int shirtNummer, String spelerNaam, int spelerTeam, int wedstrijdSpeler) {
super();
this.shirtNummer = shirtNummer;
this.spelerNaam = spelerNaam;
this.spelerTeam = spelerTeam;
this.wedstrijdSpeler = wedstrijdSpeler;
}
//getters & setters
public int getIdSpeler() {
return idSpeler;
}
public void setIdSpeler(int idSpeler) {
this.idSpeler = idSpeler;
}
public int getShirt() {
return shirtNummer;
}
public void setShirt(int shirtNummer) {
this.shirtNummer = shirtNummer;
}
public String getSpeler() {
return spelerNaam;
}
public void setSpeler(String spelerNaam) {
this.spelerNaam = spelerNaam;
}
public int getTeam() {
return spelerTeam;
}
public void setTeam(int spelerTeam) {
this.spelerTeam = spelerTeam;
}
public int getSpelerWedstrijd() {
return wedstrijdSpeler;
}
public void setSpelerWedstrijd(int wedstrijdSpeler) {
this.wedstrijdSpeler = wedstrijdSpeler;
}
//strings
@Override
public String toString() {
Log.d("Speler "+spelerNaam,"Team=" + spelerTeam + ", Shirt=" + shirtNummer+", wedstrijd=" + wedstrijdSpeler);
return "[id=" + idSpeler + ", shirt="+shirtNummer+", naam=" + spelerNaam + ", team=" + spelerTeam+ ", wedstrijd=" + wedstrijdSpeler
+ "]";
}
}
,并在我的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) ***********/
List <Players> CustomListViewValuesArr = new ArrayList<Players>();
Resources res =getResources();
list= (ListView)findViewById(R.id.listHome);
/**************** Create Custom Adapter *********/
adapter=new CustomListAdapter(CustomListView, CustomListViewValuesArr,res);
list.setAdapter(adapter);
}
但在日食我不断看到这提醒:
构造CustomListAdapter未定义
那么是什么我忘了使用这个自定义适配器?
'CustomListAdapter',而不是'CustomAdapter'和删除'void'。 – Luksprog
thnx!我的自定义视图中显示“无数据”。所以自定义视图正在工作:) –