自定义适配器没有显示任何项目 [英] custom adapter isn't showing any items
问题描述
这是从早期的问题上遵循:<一href=\"http://stackoverflow.com/questions/29819256/imagebutton-within-row-of-listview-android-not-working/29824507?noredirect=1#comment47783289_29824507\">ImageButton ListView中的行内的Android不工作
但是从SO大师建议后,有人建议我发布一个新的问题。
问题是,我有没有显示任何数据的自定义适配器。我曾看着其他问题,但它并没有提供解决方案。
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.
在我的主要活动我有几个按钮,其中一人:待办事项,应该创建一个从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.
所以,这里是我的code:
So, here is my code:
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;
}
}
我显然缺少的东西,就像我前面提到的,没有数据显示得到。我知道有一些获得通过的CustomListViewAdapter 2行的项目。但我也知道,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.
我希望我已经把足够的信息/ code,但如果你觉得我需要进一步解释的东西,请说。
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();
}
另外,调用超(背景下,资源ID,rowItems);
也应该修复它。
这篇关于自定义适配器没有显示任何项目的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!