1

목록보기가 있고 모든 행에 클릭 가능한 영역이 여러 개 있습니다. bindView (CursorAdapter 사용) 모든 클릭 가능한 영역에 대해 onClickListener 설정하고 모든 것이 잘 작동합니다. 의 Bindview는 (내가 첫 번째 항목을 클릭하면 보인다Listview - 재사용 뷰에서 onClickListener의 onClick이 호출되었습니다.

내가보기를 클릭하고 동시에 notifyDataSetChanged를 호출 (또는 커서가 변경) 때

문제가 발생하지만, OnClickListener를 호출하기 전에, 뷰는 재사용 두 번째 항목에 대해 onClickListener가 호출되고 두 번째 항목에 onClickListener가 호출됩니다. 유일한 생각은 touch가 실행 된 후 onClickListener가 호출되기 전에보기가 다시 사용된다는 것입니다. 어떤 문제 해결 방법이나 무엇이 잘못 될 수 있습니까?

편집 : 클릭보기를 스크롤 내부 입니다 경우 클릭하거나 스크롤 여부를 확인하기 위해 onTouch와 onclick을 사이에 180ms 지연이있다. 따라서 view가 onTouch와 onClick 사이에서 재사용되는 경우, onClick은 재사용 된 (잘못된) 행에서 호출됩니다.

OnLongClickListener를 사용하면 거의 동일하게 더 쉽게 재생할 수 있습니다.

+0

코드를 추가하십시오. – Raanan

답변

0

아마도 onClickListener를 비공개로 설정하려고합니다.

public View newView(Context context, Cursor cursor, ViewGroup parent) { 
    ViewHolder holder = new ViewHolder(); 
    View view = inflater.inflate(R.layout.yourrow, parent, false); 


    holder.your_textview = (TextView) view.findViewById(R.id.tv_your_textviewfield); 
    holder.your_textview.setOnClickListener(mMoves_OnClickListener); 
    holder.position = cursor.getPosition(); 
    bindView(view, context, cursor); 
    view.setTag(holder); 
    return view; 
} 

private OnClickListener mMoves_OnClickListener = new OnClickListener() { 
    public void onClick(View v) { 

     ViewHolder holder = (ViewHolder) ((View) v.getParent()).getTag(); 

     switch (v.getId()) { 
     case R.id.tv_your_textviewfield: 
      ((OnMoveScoreSelectedListener) context).onMoveScoreClickSelected(); 
      break; 
     case ... 
     } 
    } 
}; 
+0

고마워요,하지만 도움이되지 않습니다. – vandzi