在ListView内的TextView上安装Android setMovementMethod

时间:2014-02-19 11:51:04

标签: android android-listview textview

在列表视图中,我在每一行上都有一个被截断的文本,因为它太长了。所以我在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;
}

1 个答案:

答案 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;
}