3

これは私のソースコードです。getView で間違った位置が表示されました。私はすでにGoogleでその解決策を検索しましたが、成功しませんでした。私を助けてください。

public View getView(final int position, View convertView,
        ViewGroup viewGroup) {
    final Phonebook entry = listPhonebook.get(position);
    if (convertView == null) {
        LayoutInflater inflater = (LayoutInflater) context
                .getSystemService(Context.LAYOUT_INFLATER_SERVICE);
        convertView = inflater.inflate(R.layout.phone_row, null);
        convertView.setOnTouchListener(new OnTouchListener() {

            @Override
            public boolean onTouch(View mycurrentListItemView,
                    MotionEvent event) {

                int action = event.getAction();
                if (action == MotionEvent.ACTION_DOWN) {
                    Log.i("List item clicked position : ", "" + position);
                    Log.i("Name::Mail", "" + entry.getName() + " :: "
                            + entry.getMail());
                    mycurrentListItemView.setBackgroundColor(Color
                            .parseColor("#38ACEC"));
                } else if (action == MotionEvent.ACTION_UP
                        || action == MotionEvent.ACTION_CANCEL) {
                    mycurrentListItemView.setBackgroundColor(Color
                            .parseColor("#FFFFFF"));
                }
                return false;
            }
        });
4

1 に答える 1

4

ListViewは、convertViewを使用してビューをリサイクルしているため、ビューが最初に作成されたときにのみonTouchListenerを設定します(。のため)if (convertView == null)

このソリューションを機能させるには、convertView.setOnTouchListener()呼び出しをif (convertView == null)条件の外に移動する必要があります。このようにして、適切な電話帳エントリでビューが画面に表示されるたびに初期化されます。

于 2012-09-20T06:17:21.367 に答える