2014-02-19 1 views
5

Innerhalb einer Listenansicht habe ich auf jeder Zeile einen Text, der abgeschnitten ist, weil es zu lang ist. Also setze ich setMovementMethod() in der textView, um es scrollbar zu machen. Aber jetzt kann die ListView nicht angeklickt werden. Wie kann ich dieses Problem lösen?Android setMovementMethod in einem TextView in einem ListView

Unten ist die Methode getView() vom Adapter. Ich würde jede mögliche Antwort, Dank im Voraus schätzen.

@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

Kein Code keine Antwort. – Snicolas

+0

Die Methode getView wurde vom Adapter hinzugefügt. Es ist nicht viel anders als das, was ich in der Post erklärt habe. – Laura

+0

Wie erkennen Sie, klicken Sie auf die Listenansicht? – Snicolas

Antwort

2

Ich schaffte es, dieses Problem selbst zu lösen. Ich habe den OnTouchListener im Adapter implementiert und in der Textansicht festgelegt. Die Logik für das Berührungsereignis ist: Ich überprüfe, ob das Berührungsereignis ein Tippen oder ein Wischen ist. Wenn es sich um einen Swipe handelt, wird der Swipe/Scroll ausgeführt und wenn ich ihn tappe, rufe ich die Methode auf, die ich für das click -Ereignis der listView verwende.

@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; 
} 
Verwandte Themen