1

私はArrayAdapter(extends ArrayAdapter)を認識しています。メソッドgetViewは常に画面を再描画し、常に位置アイテムを変更しますが、ListView.これだけが問題ではありません。テキストを変更したい場合-再ソートされます。行をアクティブにするだけでなく、2回クリックsetOnClickListenerする必要があります

私の情報源

public View getView(int position, View convertView, ViewGroup parent) {


        UrlItem urlItem = (UrlItem) this.getItem(position);
        ViewHolder viewHolder = null;

        if (convertView == null) {

            convertView = inflater.inflate(R.layout.database_table_item, null);
            viewHolder = new ViewHolder();

            viewHolder.text = (TextView) convertView
                    .findViewById(R.id.editText1);

            viewHolder.text.setOnClickListener(new OnClickListener() {
                public void onClick(View v) {                   


                    int getPosition = (Integer) v.getTag();
                }
            });



            convertView.setTag(viewHolder);

            convertView.setTag(R.id.editText1, viewHolder.text);
            viewHolder.text.setTag(position);
            viewHolder.text.setText(urlItem.getUrl());
        } else {
            viewHolder = (ViewHolder) convertView.getTag();
        }

        return convertView;

    }

ここに画像の説明を入力してください

このリンクに私を助けました。

4

1 に答える 1

4

ビューがリサイクルされるとき(つまり、convertView!= nullのとき)は、ビューに対して何もしていません。viewHolderを取得した後、位置固有の処理を行う必要があります。これらの線に沿ってもっと何かを試してください:

if (convertView == null) {

    convertView = inflater.inflate(R.layout.database_table_item, null);
    viewHolder = new ViewHolder();

    viewHolder.text = (TextView) convertView
            .findViewById(R.id.editText1);

    viewHolder.text.setOnClickListener(new OnClickListener() {
        public void onClick(View v) {                   


            int getPosition = (Integer) v.getTag();
        }
    });

    convertView.setTag(viewHolder);

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

viewHolder.text.setTag(position);
viewHolder.text.setText(urlItem.getUrl());

return convertView;
于 2012-08-14T14:06:29.863 に答える