2014-01-09 92 views
0

我必须创建整个列表视图项目的位图;目前我下面这个方法:转换整个列表视图项目(儿童)到位图

To capture the listview individual items I have the below code:

ListView listview = shoppingItemList; 
     BaseAdapter adapter = (BaseAdapter) listview.getAdapter(); 
     int itemscount = adapter.getCount(); 
     int allitemsheight = 0; 
     List<Bitmap> bmps = new ArrayList<Bitmap>(); 
     System.out.println("In getWholeListViewItemsToBitmap......."); 
     for (int i = 0; i < itemscount; i++) { 

      View childView = adapter.getView(i, null, listview);   childView.setDrawingCacheEnabled(true); 
      childView.measure(
        MeasureSpec.makeMeasureSpec(0, MeasureSpec.UNSPECIFIED), 
        MeasureSpec.makeMeasureSpec(0, MeasureSpec.UNSPECIFIED)); 
      childView.layout(0, 0, childView.getMeasuredWidth(), 
        childView.getMeasuredHeight()); 
      // childView.setDrawingCacheEnabled(true); 
      childView.buildDrawingCache(true); 
      Bitmap b = Bitmap.createBitmap(childView.getDrawingCache()); 
      bmps.add(b); 
      childView.setDrawingCacheEnabled(true); 
      allitemsheight += childView.getMeasuredHeight(); 

     } 

我现在面临的问题是: 无需登录childView.measure之后的任何错误我的应用程序退出... 任何人都可以请帮我搞清楚究竟是什么问题。

感谢, Android开发

+0

添加catch块和记录异常,然后张贴在这里 –

+0

嗨,这是异常已登录> 的措施的例外....空 的Java。 lang.NullPointerException at android.graphics.Bitmap.createBitmap(Bitmap.java:403) .activity.HomeScreenActivty.getWholeListViewItemsToBitmap(HomeScreenActivty.java:424) – user1257009

+0

我可以找出为什么我得到n。 我之前使用BaseAdapter而不是使用Arrayadapter。 现在我正在使用 - ArrayAdapter adapter =(ArrayAdapter)listview.getAdapter(); 也使用ArrayAdapter构造函数,它需要这样的布局资源ID: listAdapterArray = new ListItemsArrayAdapter(this,R.layout.listviewitem,itemList); shoppingItemList.setAdapter(listAdapterArray); 然后调用上面提到的代码。 – user1257009

回答

0

在列表视图中,在任何时候,只可见孩子们实际创建。因此,您需要更新尚未在适配器的getView方法中创建的子项。如果您想更新当前可见的子项,则可以遍历列表视图的可见子项。下面是一个示例代码来做到这一点:

for(int k = 0; k<listView.getChildCount(); k++){ 
    View child = listView.getChildAt(k); 

    // For demo purposes, here I'm just updating a textview, you can do whatever you want 
    TextView demo = (TextView) child.findViewById(R.id.demo_text_view); 
    demo.setText("demo"); 
} 
相关问题