参考了这个话题:Android get screenshot of all ListView items
我想做类似的事情,但我有自定义适配器,它在这段代码中抛出 NullPointerException 错误:
childView.measure(MeasureSpec.makeMeasureSpec(_listView.getWidth(), MeasureSpec.EXACTLY),MeasureSpec.makeMeasureSpec(0, MeasureSpec.UNSPECIFIED));
我的自定义适配器:
public class InvoiceListAdapter extends BaseAdapter {
ArrayList<Object> _itemList;
public Activity _context;
public LayoutInflater _inflater;
BarCodeGenerator Generator = new BarCodeGenerator();
public InvoiceListAdapter(Activity context,ArrayList<Object> itemList)
{
super();
this._context=context;
this._itemList=itemList;
this._inflater=(LayoutInflater)context.getSystemService(Context.LAYOUT_INFLATER_SERVICE);
}
@Override
public int getCount() {
// TODO Auto-generated method stub
return _itemList.size();
}
@Override
public Object getItem(int position) {
// TODO Auto-generated method stub
return _itemList.get(position);
}
@Override
public long getItemId(int position) {
// TODO Auto-generated method stub
return 0;
}
public static class ViewHolder
{
TextView ProductName;
TextView Qnt;
ImageView Barcode;
TextView BarcodeFormat;
Button Del;
}
@Override
public View getView(final int position, View convertView, ViewGroup parent) {
ViewHolder holder;
if(convertView==null)
{
holder = new ViewHolder();
convertView = _inflater.inflate(R.layout.custom_row_view, null);
holder.ProductName = (TextView) convertView.findViewById(R.id.txt_CRow_ProdName);
holder.Qnt = (TextView) convertView.findViewById(R.id.txt_CRow_Qnt);
holder.Del = (Button) convertView.findViewById(R.id.btn_CRow_Delete);
holder.Barcode = (ImageView) convertView.findViewById(R.id.Img_CRow_Barcode);
/*-----------------------------Deleting Item with Button--------------------*/
holder.Del.setTag(holder);
convertView.setTag(holder);
}
else
{
holder=(ViewHolder)convertView.getTag();
}
AnItem Item = (AnItem) _itemList.get(position);
holder.ProductName.setText(Item.getProductName());
holder.Qnt.setText(Item.getQnt());
holder.Barcode.setImageBitmap(Generator.Generate(Item.getProductName(), BarcodeFormat.valueOf(Item.getBarcode() ),500,200 ) );
holder.Del.setOnClickListener(new OnClickListener() {
@Override
public void onClick(View v) {
Toast.makeText(_context,"Item Deleted!: "+position, Toast.LENGTH_SHORT).show();
_itemList.remove(position);
notifyDataSetChanged();
// TODO Auto-generated method stub
}
});
return convertView;
}
}
我的自定义行:
<?xml version="1.0" encoding="utf-8"?>
<RelativeLayout
xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:orientation="vertical">
<TextView
android:id="@+id/txt_CRow_ProdName"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:hint="@string/ProductName"
android:textSize="16sp"
android:textStyle="bold" />
<Button
android:id="@+id/btn_CRow_Delete"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_alignParentRight="true"
android:layout_centerVertical="true"
android:focusable="false"
android:text="@string/Delete"
android:textSize="12sp"/>
<TextView
android:id="@+id/txt_CRow_Qnt"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_below="@+id/Img_CRow_Barcode"
android:hint="@string/Qnt"
android:textSize="12sp"
android:textStyle="bold" />
<ImageView
android:id="@+id/Img_CRow_Barcode"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_below="@+id/txt_CRow_ProdName"
android:layout_centerVertical="true"
android:layout_toLeftOf="@+id/btn_CRow_Delete"
android:layout_alignParentLeft="true"
/>
</RelativeLayout>
谢谢你的帮助。