这是我的源代码。 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;
}
});
答案 0 :(得分:4)
ListView使用convertView回收视图,因此它只在第一次创建视图时设置onTouchListener(因为if (convertView == null)
。
如果您希望此解决方案有效,则必须将convertView.setOnTouchListener()
调用移至if (convertView == null)
条件之外。
这样,每次使用正确的电话簿条目在屏幕上显示视图时,它都会被初始化。