getView显示错误的位置 - ListView Android

时间:2012-09-18 07:38:22

标签: android-listview

这是我的源代码。 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;
            }
        });

1 个答案:

答案 0 :(得分:4)

ListView使用convertView回收视图,因此它只在第一次创建视图时设置onTouchListener(因为if (convertView == null)

如果您希望此解决方案有效,则必须将convertView.setOnTouchListener()调用移至if (convertView == null)条件之外。 这样,每次使用正确的电话簿条目在屏幕上显示视图时,它都会被初始化。