在列表视图中,我在每一行上都有一个被截断的文本,因为它太长了。所以我在textView上设置了setMovementMethod()以使其可滚动。但是现在无法单击ListView。我该如何解决这个问题?
以下是适配器的getView()方法。
@Override
public View getView(int position, View convertView, final ViewGroup parent) {
final ViewHolder holder;
if (convertView == null) {
convertView = mInflater.inflate(R.layout.list_row, null);
holder = new ViewHolder();
holder.nameLabel = (TextView) convertView.findViewById(R.id.name);
convertView.setTag(holder);
holder.nameLabel.setMovementMethod(ScrollingMovementMethod.getInstance());
} else {
holder = (ViewHolder) convertView.getTag();
}
return convertView;
}
答案 0 :(得分:2)
毕竟我设法自己解决了这个问题。我在适配器中实现了OnTouchListener并将其设置在文本视图中。触摸事件的逻辑是:我检查触摸事件是点击还是滑动。如果是滑动,则会执行滑动/滚动,如果是轻击,我会调用我用于listView的单击事件的方法。
@Override
public boolean onTouch(View v, MotionEvent motionEvent) {
switch (motionEvent.getAction()) {
case MotionEvent.ACTION_DOWN:
mIsScrolling = false;
mDownX = motionEvent.getX();
break;
case MotionEvent.ACTION_MOVE:
float deltaX = mDownX - motionEvent.getX();
if ((Math.abs(deltaX) > mSlop)) { // swipe detected
mIsScrolling = true;
}
break;
case MotionEvent.ACTION_CANCEL:
case MotionEvent.ACTION_UP:
if (!mIsScrolling) {
openNewScreen(v); // this method is used for click listener of the ListView
}
break;
}
return false;
}