如何从web创建带文本框和imageview的自定义列表适配器?

时间:2012-11-16 14:37:55

标签: android listview hashmap android-imageview listadapter

我正在使用参数化的Uri链接,我通过AsyncTask来获取(GET)一些信息,只要用户在TextBox中提供一些信息并点击Button来启动任务。

我得到响应并将该信息作为JSONObject插入并将其放入HashMap的ArrayList中,该列表包含三个字段,fullname,username和PhotoByte。

我想要的是为ListView创建一个自定义适配器以显示该信息。我知道如何将ByteArray解码为Bitmap并将其设置为ImageView,但我正在努力。

我跟着这个tutorial关于如何制作一个好的自定义适配器......但我不需要实例化HttpConnections,我也不需要从url加载图像,而是我需要转换来自的byteArray url并在该自定义适配器的ListView项目中的ImageView中显示它。

2 个答案:

答案 0 :(得分:0)

您需要构建一个.xml文件,例如row.xml,您可以根据需要设置TextViews和ImageViews(和按钮)。

您还需要构建自定义适配器,如下面的链接所示:

http://www.ezzylearning.com/tutorial.aspx?tid=1763429

我发现这是最好,最简单的自定义listadapter教程之一。

另外,值得一提的是,我们建议进行一些优化,因为在不太强大的设备上,listview可能会非常慢而且速度不快。

答案 1 :(得分:0)

是使用自定义适配器,在其中你可以做任何你喜欢的事情;)这里有一些代码,但你应该看看其他例子来弄清楚适配器是如何工作的。

>      public class Adapter_Custom extends BaseAdapter {
>         
>           // DEBUG
>           private final String TAG = this.getClass().getSimpleName();
>         
>           // Layout
>           private LayoutInflater inflater = null;
>           public ViewHolder holder;
>           View vi;
>         
>           Context context;
>           private ArrayList<Item_Pin> pinItems;
>         
>           public Adapter_Custom(Context context, ArrayList<Item_Pin> pinItems) {
>               this.context    = context;
>               this.pinItems   = pinItems;
>               
>               inflater = (LayoutInflater) context.getSystemService(Context.LAYOUT_INFLATER_SERVICE);
>           }
>         
>           // Used internally by this class
>           public int getCount() {
>               return pinItems.size();
>           }
>           
>           // 
>           @Override
>           public long getItemId(int position) {
>               // Return whatever u like here
>               return 0;
>           }
>         
>           @Override
>           public String getItem(int position) {
>               return "You can return whatever u like here";
>           }
>         
>           public View getView(int position, View convertView, ViewGroup parent) {
>         
>               vi = convertView;
>          // If there is no ViewHolder already, create a new one
>               if(convertView  ==  null){
>                   vi = inflater.inflate(R.layout.your_xml_file, null);
>                   holder = new ViewHolder();
>         
>                   holder.title        = (TextView)vi.findViewById(R.id.your_xml_file_textview);
>                   holder.background   = (LinearLayout)vi.findViewById(R.id.your_xml_file_linearlayout);
>         
>                   vi.setTag(holder);
>                   holder = (ViewHolder)vi.getTag(); // If there already is a viewholder, reuse it!                 
} else {
>                   holder = (ViewHolder)vi.getTag();
>               }
>          // This is where you place code for every list item - this is where you convert your base64 to images.
>               holder.title.setText(pinItems.get(position).getPinText());
>               // here you could also set the background of holder.background to your base64 image.
>         
>               return vi;
>           }
>         
>           //XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX
>           // VIEWHOLDER - This is the code part of your XML
>           //XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX
>           public class ViewHolder{
>         
>               public TextView title;
>               public LinearLayout background;
>         
>           }
>         }

使用该代码并将其替换为您自己的XML文件和数据,然后将代码放在getView()方法中,该方法将您的字节数组转换为每个列表项的图像。