我在列表中创建了一个适配器,但是我从我的网络服务查询中获得了一个数组json。
修改
public class CustomListViewAdapter extends ArrayAdapter<RowItem> {
Context context;
private ArrayList<RowItem> originalList;
private ArrayList<RowItem> items;
private CountryFilter filter;
public CustomListViewAdapter(Context context, int resourceId,
List<RowItem> items) {
super(context, resourceId, items);
this.context = context;
this.items = new ArrayList<RowItem>();
this.items.addAll(items);
this.originalList = new ArrayList<RowItem>();
this.originalList.addAll(items);
}
/*private view holder class*/
private class ViewHolder {
ImageView imageView;
TextView txtNombre;
TextView txtTicket;
TextView txtAsiento;
TextView txtNumero;
TableLayout tblLayout;
TableRow row;
}
@Override
public Filter getFilter() {
if (filter == null){
filter = new CountryFilter();
}
return filter;
}
@Override
public int getCount() {
return items.size();
}
@Override
public RowItem getItem(int position) {
return items.get(position);
}
@Override
public long getItemId(int position) {
return position;
}
@Override
public View getView(int position, View convertView, ViewGroup parent) {
ViewHolder holder = null;
RowItem rowItem = getItem(position);
LayoutInflater mInflater = (LayoutInflater) context
.getSystemService(Activity.LAYOUT_INFLATER_SERVICE);
if (convertView == null) {
convertView = mInflater.inflate(R.layout.lista, null);
holder = new ViewHolder();
holder.row = (TableRow)convertView.findViewById(R.id.tableRow2);
holder.txtNombre = (TextView)holder.row.getChildAt(0);
holder.txtTicket = (TextView)holder.row.getChildAt(1);
} else
holder = (ViewHolder) convertView.getTag();
holder.txtNombre.setText(rowItem.getNombre());
//holder.imageView.setImageResource(rowItem.getImageId());
holder.txtTicket.setText(rowItem.getTicket());
return convertView;
}
private class CountryFilter extends Filter
{
@Override
protected FilterResults performFiltering(CharSequence constraint) {
constraint = constraint.toString().toLowerCase();
FilterResults result = new FilterResults();
if(constraint != null && constraint.toString().length() > 0)
{
ArrayList<RowItem> filteredItems = new ArrayList<RowItem>();
for(int i = 0, l = originalList.size(); i < l; i++)
{
RowItem asistente = originalList.get(i);
if(asistente.toString().replace('á', 'a').toLowerCase().contains(constraint) || asistente.toString().replace('é', 'e').toLowerCase().contains(constraint) || asistente.toString().replace('í', 'i').toLowerCase().contains(constraint) || asistente.toString().replace('ó', 'o').toLowerCase().contains(constraint) || asistente.toString().replace('ú', 'u').toLowerCase().contains(constraint))
filteredItems.add(asistente);
}
result.count = filteredItems.size();
result.values = filteredItems;
}
else
{
synchronized(this)
{
result.values = originalList;
result.count = originalList.size();
}
}
return result;
}
@SuppressWarnings("unchecked")
@Override
protected void publishResults(CharSequence constraint, FilterResults results) {
items = (ArrayList<RowItem>)results.values;
notifyDataSetChanged();
clear();
for(int i = 0, l = items.size(); i < l; i++){
System.out.println("RESULTADO:"+items.get(i));
add(items.get(i));
notifyDataSetInvalidated();
}
}
}
}
我的问题出在getView函数中。收费时,我给了我错误:
08-06 11:48:42.505: E/AndroidRuntime(10018): FATAL EXCEPTION: main
08-06 11:48:42.505: E/AndroidRuntime(10018): java.lang.NoSuchFieldError: com.google.zxing.client.android.R$id.tabla_cuerpo
08-06 11:48:42.505: E/AndroidRuntime(10018): at com.google.zxing.client.android.CustomListViewAdapter.getView(CustomListViewAdapter.java:70)
我的布局:
<?xml version="1.0" encoding="utf-8"?>
<TableLayout android:id="@+id/tabla_cuerpo" xmlns:android="http://schemas.android.com/apk/res/android" android:layout_height="wrap_content" android:layout_width="match_parent">
<TableRow android:id="@+id/tableRow1" android:layout_width="match_parent" android:layout_height="wrap_content">
<TextView android:gravity="center_horizontal" android:id="@+id/textView0" android:layout_width="wrap_content" android:layout_height="wrap_content" android:text="Validaciones"/>
</TableRow>
<TableRow android:id="@+id/tableRow2" android:layout_width="match_parent" android:layout_height="wrap_content">
<TextView android:layout_margin="1dip" android:id="@+id/txtNombre" android:layout_weight="0.3" android:layout_width="wrap_content" android:layout_height="wrap_content" android:textAppearance="?android:attr/textAppearanceMedium" android:text="Celda1"/>
<TextView android:layout_margin="1dip" android:id="@+id/txtTicket" android:layout_weight="0.3" android:layout_width="wrap_content" android:layout_height="wrap_content" android:textAppearance="?android:attr/textAppearanceMedium" android:text="Celda2"/>
<TextView android:layout_margin="1dip" android:id="@+id/txtAsiento" android:layout_weight="0.3" android:layout_width="wrap_content" android:layout_height="wrap_content" android:textAppearance="?android:attr/textAppearanceMedium" android:text="Celda3"/>
</TableRow>
</TableLayout>
加载视图时无法上传数据时出现问题。奇怪的是,我在另一个项目中使用相同的代码,格式与JSON相同并且正常工作。我在getView事件适配器中看到了几个自定义代码,但我认为我的错误在于我的元素,无法找到解决方法。
答案 0 :(得分:1)
@Override
方法的{p> getView
正在搞乱。
答案 1 :(得分:0)
请覆盖getCount和getItemId。
使用代码更新答案:
@Override
public int getCount() {
return itemList.size();
}
@Override
public Object getItem(int position) {
return itemList.get(position);
}
@Override
public long getItemId(int position) {
return position;
}
请不要使用getChildAt(VIEW ID),你必须使用findViewByID
holder.txtNombre = (TextView)holder.row.getChildAt(R.id.txtNombre);
holder.txtTicket = (TextView)holder.row.getChildAt(R.id.txtTicket);
提示@PPartisan
的Thx顺便说一下,你可以用更少的ID来做同样的事情:
<?xml version="1.0" encoding="utf-8"?>
<TextView android:gravity="center_horizontal" android:id="@+id/textView0" android:layout_width="wrap_content" android:layout_height="wrap_content" android:text="Validaciones"/>
</TableRow>
<TableRow android:layout_width="match_parent" android:layout_height="wrap_content">
<TextView android:layout_margin="1dip" android:id="@+id/txtNombre" android:layout_weight="0.3" android:layout_width="wrap_content" android:layout_height="wrap_content" android:textAppearance="?android:attr/textAppearanceMedium" android:text="Celda1"/>
<TextView android:layout_margin="1dip" android:id="@+id/txtTicket" android:layout_weight="0.3" android:layout_width="wrap_content" android:layout_height="wrap_content" android:textAppearance="?android:attr/textAppearanceMedium" android:text="Celda2"/>
<TextView android:layout_margin="1dip" android:id="@+id/txtAsiento" android:layout_weight="0.3" android:layout_width="wrap_content" android:layout_height="wrap_content" android:textAppearance="?android:attr/textAppearanceMedium" android:text="Celda3"/>
</TableRow>
一旦你将布局夸大到你的convertView变量,就可以访问所有字段视图convertview.findViewByID(ID)