2014-02-19 37 views
5

在列表視圖中我在每行上都有一個文本被截斷,因爲它太長。所以我在textView上設置了setMovementMethod()以使其可以滾動。但是現在ListView不能被點擊。我怎麼解決這個問題?Android setMovement方法在ListView中的TextView中

下面是適配器的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

無代碼無答案。 – Snicolas

+0

從適配器添加getView方法。這與我在帖子中解釋的並無太大差別。 – Laura

+0

如何檢測列表視圖上的點擊? – Snicolas

回答

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; 
} 
相關問題