2017-11-05 1 views
0

뷰어 홀더 항목에 이미지보기가있는 recyclerview를 사용하고 있습니다. 둘 다 onclick 수신기가 있습니다. 자식 이미지 뷰가 onclick에 응답 한 경우 recylerview onClick이 응답하지 않기를 바랍니다. 클릭 한 위치가 이미지 뷰어에 없으면 recyclerview에 응답해야합니다. 내 연구는 지금까지이 상황이 두 함수 모두 onClick에 응답하기 위해 동일한 함수를 사용하여 처리 될 수 있음을 보여 주었지만 문제는 recyclerview onclick과 그 자식 imageview onClick이 다르다는 것입니다. 나는 그들이 동일한 기능으로 어떻게 처리 될 수 있는지 보지 못한다. 지금 나는 이미지 변수가이 클릭에 이미 응답했음을 나타내는 전역 변수를 사용하는 해킹 방법을 사용하고 응답하기 전에 전역 변수를 확인하기 위해 recyclerview 수신기에 200ms 지연을 설정합니다. 이 일을하는 더 적절한 방법이 있습니까?자식보기가 이미 응답 한 후 부모 리사이더보기 onclick 응답을 해제하는 방법은 무엇입니까?

리사이더 뷰의 모든 하위 뷰에 대해 "onClick"을 추가하고 리사이클 뷰에서 리스너를 제거하면 작동 할 수 있다는 것을 알게되었습니다. 지금은 어쨌든 두 개의 자식 뷰만 있습니다. 더 많은 것을 추가 할 예정이지만, 여전히 관리가 가능합니다. 더 좋은 방법이 없다면 아마 그렇게 할 것입니다. 당신의 ConstraintLayout에서

<?xml version="1.0" encoding="utf-8"?> 
<android.support.constraint.ConstraintLayout 
xmlns:android="http://schemas.android.com/apk/res/android" 
xmlns:tools="http://schemas.android.com/tools" 
xmlns:app="http://schemas.android.com/apk/res-auto" 
android:layout_width="match_parent" 
android:layout_height="wrap_content" 
android:focusable="true" 
android:paddingLeft="16dp" 
android:paddingRight="4dp" 
android:paddingTop="10dp" 
android:paddingBottom="10dp" 
android:clickable="true" 
android:background="?android:attr/selectableItemBackground" 
android:orientation="vertical"> 

<TextView 
    android:id="@+id/lstItemName" 
    android:textColor="@color/title" 
    android:textSize="16dp" 
    android:textStyle="bold" 
    app:layout_constraintTop_toTopOf="parent" 
    app:layout_constraintLeft_toLeftOf="parent" 
    app:layout_constraintRight_toLeftOf="@+id/lstItemReportby" 
    android:layout_gravity="left" 
    android:layout_width="0dp" 
    android:layout_height="wrap_content" 
    /> 


<ImageView 
    android:id="@+id/lstItemMap" 
    app:layout_constraintRight_toRightOf="parent" 
    app:layout_constraintTop_toTopOf="parent" 
    android:layout_marginRight="2dp" 
    android:layout_width="wrap_content" 
    android:layout_height="wrap_content" 
    android:clickable="true"/> 
</android.support.constraint.ConstraintLayout> 


public class TrackedItemListAdapter extends RecyclerView.Adapter<TrackedItemListAdapter.MyViewHolder>{ 

public class MyViewHolder extends RecyclerView.ViewHolder { 
    public TextView m_itemName, m_itemDes, m_itemReportedBy, m_itemHiddenText; 
    public ImageView m_itemMapDrop; 


    public MyViewHolder(View view) { 
     super(view); 
     m_itemName = (TextView) view.findViewById(R.id.lstItemName); 
     m_itemMapDrop = (ImageView) view.findViewById(R.id.lstItemMap); 
    } 
} 
@Override 
public void onBindViewHolder(TrackedItemListAdapter.MyViewHolder holder, int position) { 
     holder.m_itemName.setText(obj.getName()); 
     holder.m_itemMapDrop.setImageResource(R.drawable.ic_img_nomap); 

     holder.m_itemMapDrop.setOnClickListener(new View.OnClickListener() { 
      //@Override 
      public void onClick(View v) { 
       startMap(); 
      } 
     }); 
    } 
} 


m_trackedItemListAdapter = new TrackedItemListAdapter(); 
    m_recyclerView = (RecyclerView) findViewById(R.id.recycler_view); 
    m_recyclerView.setHasFixedSize(true); 
    RecyclerView.LayoutManager mLayoutManager = new LinearLayoutManager(getApplicationContext()); 
    m_recyclerView.setLayoutManager(mLayoutManager); 
    m_recyclerView.addItemDecoration(new DividerItemDecoration(this, LinearLayoutManager.VERTICAL)); 
    m_recyclerView.setItemAnimator(new DefaultItemAnimator()); 
     m_recyclerView.setAdapter(m_trackedItemListAdapter); 
      m_recyclerView.addOnItemTouchListener(new RecyclerTouchListener(getApplicationContext(), m_recyclerView, new RecyclerTouchListener.ClickListener() { 
     @Override 
     public void onClick(View view, int position) { 


       //a hack to turn off response if the imageview for location already responded 
       new Handler().postDelayed(new Runnable() { 
        @Override 
        public void run() { 
         popupItemContent(); 
        } 
       }, 200); 

      } 

     } 
+0

난 정말 당신이 직접 그 방법으로 지정하지 않는 한이 완전히 다른 견해는 결국 같은 OnClickListener를 공유 끝낼 수있는 방법을 볼 수 없습니다. 코드를 공유해 주시겠습니까? ViewHolder, 어댑터 및 레이아웃. – mradzinski

답변

0

사용이 :

descendantFocusability="blocksDescendants" 
+0

이 키워드에 대해 모든 값을 시도했지만 아무 것도 보이지 않습니다. 내 이미지를 클릭해도 여전히 두 가지 조치를 취합니다. Patrick

관련 문제