我一直在与简单的将自定义适配器应用到列表视图上几天,希望有人可以在我出错的地方帮助我。
我有一个ListView(listViewAsItHappens),我想在视图中使用自定义适配器,这样我就可以格式化ListView的外观。我看过很多文章,但似乎没有一个看起来按预期工作。
当我调试代码时,它会转到适配器,但ListView中没有显示任何内容。我没有得到任何错误,看起来所有变量/对象都很好地传递。
帮助我让ListView显示3行文字和图像的任何帮助都会很棒。
ListView list;
String[] itemname ={
"Whistle",
"Football",
"Card"
};
Integer[] imgid={
R.drawable.ic_whistle,
R.drawable.ic_football,
R.drawable.ic_yellowcard
};
public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) {
View view = inflater.inflate(R.layout.fragment_refscorecard, container, false);
list=(ListView) view.findViewById(R.id.listViewAsItHappens);
asItHappened adapter=new asItHappened(getActivity(), itemname, imgid);
list.setAdapter(adapter);
adapter.notifyDataSetChanged();
我的自定义适配器(asithappens_listview是我的XML布局);
public class asItHappened extends ArrayAdapter<asItHappened_List> {
private Activity context;
private String[] eventType;
private final Integer[] imgid;
public asItHappened(Context context, String[] event, Integer[] icon) {
super(context, R.layout.asithappens_listview);
this.eventType=event;
this.imgid=icon;
}
@NonNull
@Override
public View getView(int position, @Nullable View convertView, @NonNull ViewGroup parent) {
LayoutInflater inflater=context.getLayoutInflater();
View rowView=inflater.inflate(R.layout.asithappens_listview, null,true);
TextView txtTitle = (TextView) rowView.findViewById(R.id.txtEvent);
ImageView imageView = (ImageView) rowView.findViewById(R.id.imgEvent);
rowView.findViewById(R.id.textView1);
txtTitle.setText(eventType[position]);
imageView.setImageResource(imgid[position]);
return rowView;
}
}
答案 0 :(得分:2)
您尚未覆盖getCount()
的{{1}}方法。您需要在客户适配器类中覆盖它并返回需要显示的元素的大小。在自定义适配器类中添加这样的内容。
ArrayAdapter
您可以更改自定义适配器的声明并从@Override
public int getCount() {
return imgid.length;
}
或者为了获得更大的灵活性,您可以像ArrayAdapter<String>
这样扩展它,只需将自定义适配器类更改为此。
BaseAdapter
答案 1 :(得分:0)
您可以使用super constructor
,在string[]
的基础上,getView
会为item
中的每个string[]
触发public class asItHappened extends ArrayAdapter<String> { //< make it string
private Activity context;
private String[] eventType;
private final Integer[] imgid;
public asItHappened(Context context, String[] event, Integer[] icon) {
super(context, R.layout.asithappens_listview,event); //<-- pass event
this.eventType=event;
this.imgid=icon;
}
//rest of the code
}
方法。 / p>
if($pages){
include('public/pages/'.$pages->page.'.php');
}else include('public/pages/errors/404.php');
答案 2 :(得分:0)
您缺少覆盖方法
添加此
@Override
public int getCount() {
return eventType.length;
}
答案 3 :(得分:0)
您已创建适配器但尚未向其中添加对象。您可能希望add()
(适配器的方法)将对象放入适配器,以便更新计数。
或者,您必须实施getCount()
方法,也可以实施getItemId()
和getItem()
方法。
答案 4 :(得分:0)
覆盖getcount方法并返回数组
的大小