自定义适配器不显示输出

时间:2018-03-19 11:52:21

标签: android android-layout

我一直在与简单的将自定义适配器应用到列表视图上几天,希望有人可以在我出错的地方帮助我。

我有一个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;
  }
}

5 个答案:

答案 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方法并返回数组

的大小