0

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

我得到响应并将该信息作为 JSONObject 插入,并将其放入包含三个字段、全名、用户名和 PhotoByte 的 HashMap 的 ArrayList 中。

我想要的是为 ListView 制作一个自定义适配器以显示该信息。我知道如何将 decodeByteArray 解码为 Bitmap 并将其设置为 ImageView,但在某处我正在苦苦挣扎。

我按照本教程学习了如何制作一个好的自定义适配器...但是我不需要实例化 HttpConnections 也不需要从 url 加载图像,而是需要转换从 url 给出的 byteArray 并将其显示在该自定义适配器的 ListView 项中的 ImageView。

4

2 回答 2

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() 方法中,该方法将您的字节数组转换为每个列表项的图像。

于 2012-11-16T14:57:04.167 回答
0

您需要构建一个 .xml 文件,例如 row.xml,您可以在其中设置您喜欢的 TextViews 和 ImageViews(和 Buttons)。

您还需要构建自定义适配器,就像此处的链接所示:

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

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

此外,值得一提的是,建议进行一些优化,因为列表视图很可能会很慢,并且在功能较弱的设备上不活泼。

于 2012-11-16T14:51:56.983 回答