Android 使用自定义listview适配器时,屏幕上不会显示任何内容
正如标题所述,我在让自定义listview适配器正常工作时遇到了一些问题。该应用程序在列表中不显示任何内容,只显示一个空白的白色屏幕。我用一个已经设置好的简单列表测试了数据,效果很好 History.javaAndroid 使用自定义listview适配器时,屏幕上不会显示任何内容,android,android-listview,Android,Android Listview,正如标题所述,我在让自定义listview适配器正常工作时遇到了一些问题。该应用程序在列表中不显示任何内容,只显示一个空白的白色屏幕。我用一个已经设置好的简单列表测试了数据,效果很好 History.java public class History { public String score; public String gametype; public int icon; public History() { super(); }
public class History {
public String score;
public String gametype;
public int icon;
public History() {
super();
}
public History(String score, String gametype, int icon) {
super();
this.score = score;
this.gametype = gametype;
this.icon = icon;
}
}
HistoryAdapter.java
public class HistoryAdapter extends ArrayAdapter<History> {
Context context;
int layoutResId;
History data[] = null;
public HistoryAdapter(Context context, int layoutResId, History[] data) {
super(context, layoutResId, data);
this.layoutResId = layoutResId;
this.context = context;
this.data = data;
}
@Override
public View getView(int position, View convertView, ViewGroup parent) {
HistoryHolder holder = null;
if(convertView == null)
{
LayoutInflater inflater = ((Activity)context).getLayoutInflater();
convertView = inflater.inflate(layoutResId, parent, false);
holder = new HistoryHolder();
holder.imageIcon = (ImageView)convertView.findViewById(R.id.icon);
holder.textTitle = (TextView)convertView.findViewById(R.id.gameType);
holder.textScore = (TextView)convertView.findViewById(R.id.score);
convertView.setTag(holder);
}
else
{
holder = (HistoryHolder)convertView.getTag();
}
History history = data[position];
holder.textScore.setText(history.score);
holder.textTitle.setText(history.gametype);
holder.imageIcon.setImageResource(history.icon);
return convertView;
}
static class HistoryHolder
{
ImageView imageIcon;
TextView textTitle;
TextView textScore;
}
}
公共类HistoryAdapter扩展了ArrayAdapter{
语境;
int layoutResId;
历史数据[]=null;
公共HistoryAdapter(上下文上下文、int-layoutResId、历史[]数据){
super(上下文、layoutResId、数据);
this.layoutResId=layoutResId;
this.context=上下文;
这个数据=数据;
}
@凌驾
公共视图getView(int位置、视图转换视图、视图组父视图){
HistoryHolder=null;
if(convertView==null)
{
LayoutInflater充气器=((活动)上下文)。getLayoutInflater();
convertView=充气机。充气(layoutResId,父项,false);
holder=新历史holder();
holder.imageIcon=(ImageView)convertView.findViewById(R.id.icon);
holder.textTitle=(TextView)convertView.findViewById(R.id.gameType);
holder.textScore=(TextView)convertView.findViewById(R.id.score);
convertView.setTag(支架);
}
其他的
{
holder=(HistoryHolder)convertView.getTag();
}
历史=数据[位置];
holder.textScore.setText(history.score);
holder.textTitle.setText(history.gametype);
holder.imageIcon.setImageResource(history.icon);
返回视图;
}
静态类历史持有者
{
图像视图图像图标;
文本视图文本标题;
TextView textScore;
}
}
实施
for(int i = 0; i < games.length(); i++) {
JSONObject c = games.getJSONObject(i);
JSONObject gameStats = games.getJSONObject(i).getJSONObject(TAG_STATS);
type[i] = c.getString(TAG_TYPE);
champId[i] = c.getString("championId");
cs[i] = gameStats.getString("minionsKilled");
kills[i] = gameStats.getString("championsKilled");
deaths[i] = gameStats.getString("numDeaths");
assists[i] = gameStats.getString("assists");
win[i] = gameStats.getString("win");
if(win[i].equals("true"))
win[i] = "Victory";
else
win[i] = "Defeat";
if(type[i].equals("RANKED_SOLO_5x5"))
type[i] = "Ranked (Solo)";
if(type[i].equals("CAP_5x5"))
type[i] = "TeamBuilder";
if(type[i].equals("NORMAL"))
type[i] = "Unranked";
score[i] = kills[i] +"/" + deaths[i] + "/" + assists[i];
historyData[i] = new History(score[i], champId[i], R.drawable.ic_launcher); // Placeholder image
}
adapter = new HistoryAdapter(MatchHistoryActivity.this,
R.layout.list_adapter,
historyData);
list.setAdapter(adapter);
for(int i=0;i
listview.xml
<?xml version="1.0" encoding="utf-8"?>
<ListView
android:layout_width="wrap_content"
android:layout_height="wrap_content"
xmlns:android="http://schemas.android.com/apk/res/android"
android:id="@+id/list"
android:background="#111111">
</ListView>
list_item.xml
<RelativeLayout
xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="fill_parent"
android:layout_height="?android:attr/listPreferredItemHeight"
android:background="#111111"
android:padding="6dip" >
<ImageView
android:id="@+id/icon"
android:layout_width="wrap_content"
android:layout_height="fill_parent"
android:layout_alignParentBottom="true"
android:layout_alignParentTop="true"
android:layout_marginRight="6dip"
android:contentDescription="TODO"
android:src="@drawable/ic_launcher" />
<TextView
android:id="@+id/score"
android:textColor="#C49246"
android:layout_width="fill_parent"
android:layout_height="26dip"
android:layout_alignParentBottom="true"
android:layout_alignParentRight="true"
android:layout_marginLeft="5dp"
android:layout_toRightOf="@id/icon"
android:ellipsize="marquee"
android:singleLine="true"
android:text="0/0/0 KDA"
android:textSize="12sp" />
<TextView
android:id="@+id/gameType"
android:textColor="#C49246"
android:layout_width="fill_parent"
android:layout_height="wrap_content"
android:layout_above="@id/score"
android:layout_alignParentRight="true"
android:layout_alignParentTop="true"
android:layout_alignWithParentIfMissing="true"
android:layout_marginLeft="5dp"
android:layout_toRightOf="@id/icon"
android:gravity="center_vertical"
android:textSize="16sp" />
</RelativeLayout>
您需要覆盖自定义适配器中的
getCount()
。
它将返回ListView中的条目数
@Override
public int getCount() {
return myArrayList.size();
}
我认为您应该将
ArrayAdapter
替换为BaseAdapter
,并实现所有必需的方法,例如getItemId()、getItem()、getCount()、getView()
它应该很好用!。
下面是我的示例代码,不关心什么是MusicModel
protected class MusicCustomAdapter extends BaseAdapter {
private Activity context;
private List<MusicModel> musicModelList;
private SimpleDateFormat sdf = new SimpleDateFormat("mm:ss");
public MusicCustomAdapter(Activity context, List<MusicModel> musicModelList) {
this.context = context;
this.musicModelList = musicModelList;
}
@Override
public long getItemId(int position) {
return 0;
}
@Override
public Object getItem(int position) {
return this.musicModelList.get(position);
}
@Override
public int getCount() {
return this.musicModelList.size();
}
@Override
public View getView(int position, View convertView, ViewGroup parent) {
View view = convertView;
if (view == null) {
view = context.getLayoutInflater().inflate(R.layout.song_item, null);
}
MusicModel musicModel = (MusicModel) getItem(position);
TextView tvMusicName = (TextView) view.findViewById(R.id.tv_song_name);
tvMusicName.setText(musicModel.getName());
TextView tvArtist = (TextView) view.findViewById(R.id.tv_artist);
tvArtist.setText(musicModel.getArtist());
TextView tvDuration = (TextView) view.findViewById(R.id.tv_duration);
tvDuration.setText(sdf.format(musicModel.getDuration()));
ImageView imgThumbnail = (ImageView) view.findViewById(R.id.img_thumbnail);
imgThumbnail.setImageDrawable(musicModel.getThumbnail());
return view;
}
}
受保护类MusicCustomAdapter扩展BaseAdapter{
私人活动语境;
私人名单音乐模特;
私有SimpleDataFormat sdf=新SimpleDataFormat(“mm:ss”);
公共MusicCustomAdapter(活动上下文、列表MusicModelist){
this.context=上下文;
this.musicModelList=musicModelList;
}
@凌驾
公共长getItemId(int位置){
返回0;
}
@凌驾
公共对象getItem(int位置){
返回此.musicModelList.get(位置);
}
@凌驾
public int getCount(){
返回此.musicModelList.size();
}
@凌驾
公共视图getView(int位置、视图转换视图、视图组父视图){
视图=转换视图;
如果(视图==null){
view=context.GetLayoutFlater().inflate(R.layout.song_项,空);
}
MusicModel MusicModel=(MusicModel)获取项目(位置);
TextView tvMusicName=(TextView)view.findViewById(R.id.tv\u song\u name);
tvMusicName.setText(musicModel.getName());
TextView tvArtist=(TextView)view.findViewById(R.id.tv\u-artist);
tvastr.setText(musicModel.getArtist());
TextView tvDuration=(TextView)view.findViewById(R.id.tv_duration);
setText(sdf.format(musicModel.getDuration());
ImageView imgThumbnail=(ImageView)view.findViewById(R.id.img_缩略图);
imgThumbnail.setImageDrawable(musicModel.getThumbnail());
返回视图;
}
}
希望能有所帮助。用透明的更改你的列表视图背景,也用android:background=“#其他颜色”
@SimplePlan更改你的列表项相对布局背景。这样做没有任何结果,留给我同样的东西,一个空白的白色屏幕。您能解释一下为什么我们需要重写getCount()方法,反之亦然。我试图重写getCount()和getItem()方法