我正在使用参数化的Uri链接,我通过AsyncTask来获取(GET)一些信息,只要用户在TextBox中提供一些信息并点击Button来启动任务。
我得到响应并将该信息作为JSONObject插入并将其放入HashMap的ArrayList中,该列表包含三个字段,fullname,username和PhotoByte。
我想要的是为ListView创建一个自定义适配器以显示该信息。我知道如何将ByteArray解码为Bitmap并将其设置为ImageView,但我正在努力。
我跟着这个tutorial关于如何制作一个好的自定义适配器......但我不需要实例化HttpConnections,我也不需要从url加载图像,而是我需要转换来自的byteArray url并在该自定义适配器的ListView项目中的ImageView中显示它。
答案 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()方法中,该方法将您的字节数组转换为每个列表项的图像。