自定义适配器未显示任何项目 [英] custom adapter isn't showing any items

查看:107
本文介绍了自定义适配器未显示任何项目的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

这是先前问题的后续内容:

This is a follow on from an earlier question: ImageButton within row of ListView android not working But after suggestions from SO gurus it has been suggested I post a new question. The issue is that I have a custom adapter that is not showing any data. I have looked into other questions, but it didn't provide a solution.

在我的主要活动中,我有几个按钮,其中一个:ToDo,应该创建一个行来显示SQLite数据库中的数据,并且根据某些因素(主要是日期),它会显示一种交通信号灯,存储为可绘制对象.

In my Main Activity I have a couple of buttons, one of them: ToDo, should create a row that displays data from a SQLite database, and depending on some factors (dates mainly), it shows a type of traffic light that is stored as a drawable.

该行中的部分项目是一个图像按钮,我希望用户能够单击它并且图像应该更改.用户还应该能够单击实际的行,然后开始新的活动.

Part of the Items in this Row is an Image Button that I want the user to be able to click and the image should change. The user should be able also to click on the actual row and a new activity starts.

我的问题是没有数据正在显示.

The issue I have is that NO DATA is being displayed.

所以,这是我的代码:

  public class MainActivity extends Activity {
  // definitions etc ...
  @Override
   public void onCreate(Bundle savedInstanceState) {
       super.onCreate(savedInstanceState);
       setContentView(R.layout.activity_main);
       // definitions etc ...
    }

    public void ToDo(View v){  // the user has clicked in the ToDo button
    IgroDatabaseHelper helper = new IgroDatabaseHelper(getBaseContext()); // create instance of SQLIte database
    numRows = helper.NumEntries("ToDo"); // Get the number of rows in table
    int i = 1;
    ArrayList<RowItem> rowItems = new ArrayList<>();
    RowItem myItem1;
    while (i <= numRows){
       // get items from database
       // depending on value select different drawable
       // put data into List Array of RowItem
       myItem1 = new RowItem(TheWhat, R.drawable.teamworka, R.drawable.redtrafficlight, R.drawable.checkbox, TheWhenBy);
                    rowItems.add(myItem1);
       //
       i = i+ 1;
    }

   ListView yourListView = (ListView) findViewById(R.id.list);
   CustomListViewAdapter customAdapter = new CustomListViewAdapter(this, R.layout.todo_row, rowItems);
   yourListView.setAdapter(customAdapter);
 }

CustomListViewAdapter看起来像这样:

The CustomListViewAdapter looks like this:

public class CustomListViewAdapter extends ArrayAdapter<RowItem> {

Context context;
ArrayList<RowItem> _rowItems;

public CustomListViewAdapter(Context context, int resourceId,
        ArrayList<RowItem> rowItems) {

    super(context, resourceId);
    this.context = context;
    _rowItems = rowItems;
    System.out.println("I am in the custom Adapter class "+ _rowItems);
}


@Override
public View getView(int position, View convertView, ViewGroup parent){
    System.out.println("This is the get view");
    View row = convertView;
    RowItem item = _rowItems.get(position);

    // you can now get your string and drawable from the item
    // which you can use however you want in your list
    String columnName = item.getColumnName();
    int drawable = item.getDrawable();
    if (row == null) {
        LayoutInflater mInflater = (LayoutInflater) context.getSystemService(Context.LAYOUT_INFLATER_SERVICE);
       row = mInflater.inflate(R.layout.todo_row, parent, false);

    }

    ImageButton chkDone = (ImageButton) row.findViewById(R.id.chkDone);
    chkDone.setOnClickListener(new View.OnClickListener() {              
          @Override
          public void onClick(View v) {
                View parentRow = (View) v.getParent();
                ListView listView = (ListView) parentRow.getParent();
                final int position =   listView.getPositionForView(parentRow);
                System.out.println("I am in position "+ position);
          }
     });

    return row;
}
}

RowItem类如下:

The RowItem Class looks like:

public class RowItem {
   private String _heading;
    private int _icon;
    private int _lights;
    private int _chkdone;
    private String _date;


    public RowItem(String heading, int icon, int lights, int chkDone, String date) {
         _heading = heading;
         _icon = icon;
         _lights = lights;
         _chkdone = chkDone;
         _date = date;

        System.out.println("adding stuff to my rows");
        System.out.println("my column Name is " + heading);
        System.out.println("My drawable int is "+ icon);

    }

    public String getColumnName() {
        System.out.println("column Names is "+ _heading);
        return _heading;
    }

    public int getDrawable() {
        return _icon;
    }

    public int getLights(){
        return _lights;
    }

    public int getchkDone(){
        return _chkdone;
    }

    public String getDate(){
        return _date;
    }
}

很明显我缺少了某些东西,如我之前提到的,没有数据显示.我知道有2行项目传递给CustomListViewAdapter.但我也知道,CustomListViewAdapter内的View getView实际上并未被调用.

I am obviously missing something, as I mentioned earlier, no data gets shown. I know that there are 2 row items that get passed to the CustomListViewAdapter. But I also know that the View getView inside the CustomListViewAdapter does not actually get called.

我希望我提供了足够的信息/代码,但是如果您觉得我需要进一步解释,请说.

I hope I have put enough information/code, but if you feel I need to explain something further, please say.

非常感谢!

推荐答案

我没有看到getCount()方法.您应该这样重写它:

I don't see a getCount() method. You should be overriding it like this:

@Override
    public int getCount() {
        return _rowItems.getCount();
    }

或者,调用super(context, resourceId, rowItems);也应该对其进行修复.

Alternatively, calling super(context, resourceId, rowItems); should also fix it.

这篇关于自定义适配器未显示任何项目的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆