0

ユーザーが TextBox に情報を入力し、ボタンを押してタスクを開始するたびに、AsyncTask を実行して情報を取得 (GET) するパラメーター化された Uri リンクを使用しています。

応答を取得し、その情報を JSONObject として挿入し、フルネーム、ユーザー名、PhotoByte の 3 つのフィールドで構成される HashMap の ArrayList に入れます。

私が欲しいのは、その情報を表示するために、ListView 用のカスタム アダプターを作成することです。ByteArray を Bitmap にデコードして ImageView に設定する方法は知っていますが、どこかで苦労しています。

私はOKであるカスタムアダプターを作成する方法についてこのチュートリアルに従いました...しかし、HttpConnectionsをインスタンス化する必要はなく、URLから画像をロードする必要もありません。代わりに、URLから指定されたbyteArrayを変換して表示する必要がありますそのカスタム アダプターの ListView アイテム内の ImageView。

4

2 に答える 2

0

TextViews と ImageViews (および Buttons) を好きなように設定する row.xml のような .xml ファイルを作成する必要があります。

また、次のリンクに示されているように、カスタム アダプターを作成する必要があります。

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

これは、最高かつ最も簡単なカスタム listadapter チュートリアルの 1 つであることがわかりました。

また、言及する価値があるのは、いくつかの最適化をお勧めすることです。なぜなら、それほど強力でないデバイスでは、リストビューが非常に遅くなり、動きが鈍くなる可能性があるからです。

于 2012-11-16T14:51:56.983 に答える
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 に答える