2

ベースアダプタを拡張しました---奇妙な問題が発生しています...このリストビューをスクロールすると-最後のアイテムが最初のアイテムに置き換えられ、次にスクロールすると-別のアイテムとすべて..いつかは正しいです。 。なぜこのコードで発生するのですか?

@Override
    public View getView(final int position, View convertView, ViewGroup parent) {
        // sets the view onto list view
        LinearLayout rowLayout = null;

        System.out.println("getView " + position + " " + convertView);
        rowLayout = (LinearLayout) mInflater.inflate(
                R.layout.apps_list_row_items, parent, false);
        if (convertView == null) {
            // inflating the row

            vh.mAppIcon = (ImageView) rowLayout.findViewById(R.id.icon);
            vh.mAppName = (TextView) rowLayout.findViewById(R.id.application);

            vh.mAppHint = (TextView) rowLayout.findViewById(R.id.hint);

            mDownloadButton = (Button) rowLayout.findViewById(R.id.download);
            mDownloadButton.setFocusable(false);

        } else {
            // convertView.getTag();
            rowLayout = (LinearLayout) convertView;
        }
        // convertView.getTag();

        // On Click of the download button which triggers an async to download
        // the file.


        mIcon = mAppIconMapList.get(position);
        System.out.println("Icon " + mIcon);
        mCurrentApplication = mAvaiableApps.get(position);
        System.out.println("Current App " + mCurrentApplication);
        vh.mAppIcon.setImageBitmap(mIcon.get(mCurrentApplication));
        vh.mAppName.setText(mCurrentApplication.replace(".apk", ""));
        vh.mAppHint.setText("Click here to view Description");

        return rowLayout;
    }
4

2 に答える 2

2

問題は、listadapterが行を再利用している場合があることです。これを修正したい場合は、以下を削除してください。

if (convertView == null) {   <----remove
   //code
}                            <----remove
else{                        <----remove
   ...                       <----remove
}                            <----remove
于 2012-05-21T11:35:19.727 に答える
0

getViewメソッドは少し疑わしいようです。次のように変更してみください。

@Override
public View getView(final int position, View convertView, ViewGroup parent) {
        // sets the view onto list view

        ViewHolder vh = null;


        System.out.println("getView " + position);

        if (convertView == null) {
            // inflating the row
            LinearLayout rowLayout = (LinearLayout) mInflater.inflate(
                R.layout.apps_list_row_items, parent, false);

            vh.mAppIcon = (ImageView) rowLayout.findViewById(R.id.icon);
            vh.mAppName = (TextView) rowLayout.findViewById(R.id.application);

            vh.mAppHint = (TextView) rowLayout.findViewById(R.id.hint);

            mDownloadButton = (Button) rowLayout.findViewById(R.id.download);
            mDownloadButton.setFocusable(false);

            convertView.setTag(vh);

        } else {
            vh = (ViewHolder) convertView.getTag();
        }


        // On Click of the download button which triggers an async to download
        // the file.


        mIcon = mAppIconMapList.get(position);
        System.out.println("Icon " + mIcon);
        mCurrentApplication = mAvaiableApps.get(position);
        System.out.println("Current App " + mCurrentApplication);
        vh.mAppIcon.setImageBitmap(mIcon.get(mCurrentApplication));
        vh.mAppName.setText(mCurrentApplication.replace(".apk", ""));
        vh.mAppHint.setText("Click here to view Description");

        return convertView;
}
于 2012-05-21T11:29:54.550 に答える