0

ListViewにフィードメッセージを表示しようとしています。ListViewを初期化する前にすべてのコンテンツを利用できるようにしておけば、かなりうまく機能しています。画像は高価なので、画像を取得しようとしています。遅延読み込みを実行しようとしています。オブジェクトをフェッチする非同期http関数を作成しました。

私が理解していることから、特定のListViewのすべてのセルは、ArrayAdapterオブジェクトの単一インスタンス内に作成されます。ここで問題となるのは、async-http関数がデータを返すまでに、実際のImageViewへの参照が別のセルの別のインスタンスに既に置き換えられていることです。その結果、画像はどこにでもランダムに表示され始めます。

これは設計上の欠陥だと思います。私がやろうとしている方法です。

この問題をどのように解決できるかについて、より良い提案はありますか?(非同期http呼び出しで遅延読み込みを実行することはできますが)

ありがとうございました!

編集:これをListViewとExpandableListViewで試しました。これは、ExpandableListView実装のコードです。

public View getChildView(int groupPosition, int childPosition, boolean isLastChild, View convertView, ViewGroup parent) {

        if (convertView == null) {
            LayoutInflater inflater = (LayoutInflater) myContext.getSystemService(Context.LAYOUT_INFLATER_SERVICE);
            convertView = inflater.inflate(R.layout.activity_feed_exlist_child_row, null);
        }

        String msgId        = data.get(childPosition).get("msgid");
        String picId        = data.get(childPosition).get("fileName");
        TextView txtMsg     = (TextView) convertView.findViewById(R.id.txtMsg);

        txtMsg.setText(data.get(childPosition).get("msg"));
        ImageView imgStatusMsgBackgroud = (ImageView) convertView.findViewById(R.id.imgStatusMsgBackground);

        String requestURL       = "picture.php?action=getPicture&picid=" + picId;
        MyHTTPRequest httpReq   = new MyHTTPRequest(requestURL, this);
        httpReq.startAsynchronous();

    return convertView;
}
4

1 に答える 1

0

さらに検索した後、いくつかの良い参考文献が見つかりました。皆さんありがとう。- AsyncTask を使用して ListView に画像をロードする - http://android-developers.blogspot.com/2010/07/multithreading-for-performance.html

于 2012-08-19T04:46:58.473 に答える