【问题标题】:Android setMovementMethod on a TextView inside a ListViewAndroid setMovementMethod 在 ListView 内的 TextView 上
【发布时间】:2014-02-19 11:51:03
【问题描述】:

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

【问题讨论】:

  • 从适配器添加了 getView 方法。这与我在帖子中解释的没有太大区别。
  • 如何检测列表视图的点击?
  • 您的视图是否可点击? stackoverflow.com/q/6128219/693752
  • 在活动中我使用这个:mListView.setOnClickListener()。只有当我没有触摸设置了 setMovemenMethod() 的 textView 时单击该行,它才有效。如果触摸是由文本视图进行的,我认为移动方法会拦截它而不是列表视图。
  • 尝试添加属性addStatesFromChildren developer.android.com/reference/android/view/…

标签: android android-listview textview


【解决方案1】:

毕竟我自己解决了这个问题。我在适配器内部实现了 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;
}

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2016-09-22
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-09-07
    • 2012-10-17
    • 1970-01-01
    相关资源
    最近更新 更多