뷰어 홀더 항목에 이미지보기가있는 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);
}
}
난 정말 당신이 직접 그 방법으로 지정하지 않는 한이 완전히 다른 견해는 결국 같은 OnClickListener를 공유 끝낼 수있는 방법을 볼 수 없습니다. 코드를 공유해 주시겠습니까? ViewHolder, 어댑터 및 레이아웃. – mradzinski