0

gridView에 OnItemClickListener을 구현하고 싶습니다.GridView OnItemClickListener가 cardView와 작동하지 않습니다.

나는 나의 조각처럼 리스너를 정의

GridView gridview = (GridView)view.findViewById(R.id.gridview); 
    gridview.setOnItemClickListener(new AdapterView.OnItemClickListener() { 
     @Override 
     public void onItemClick(AdapterView<?> parent, View view, int position, long id) { 
      Log.d("imagedata","Position clicked: "+ position); 
     } 
    }); 

    List<ItemObject> allItems = ((MainActivity) getActivity()).getTinkeractivities(); //getJSON data 
    CustomAdapter customAdapter = new CustomAdapter(getActivity(), allItems, "home"); 
    gridview.setAdapter(customAdapter); 

gridView의 각 항목에 대한 나의 레이아웃은 다음과 같습니다

<?xml version="1.0" encoding="utf-8"?> 
<android.support.v7.widget.CardView xmlns:android="http://schemas.android.com/apk/res/android" 
xmlns:card_view="http://schemas.android.com/apk/res-auto" 
android:id="@+id/card_view" 
android:layout_width="wrap_content" 
android:layout_height="wrap_content" 
android:clickable="false" 
card_view:cardUseCompatPadding="true" 
card_view:cardCornerRadius="4dp" 
card_view:cardElevation="4dp"> 

<RelativeLayout 
    android:layout_width="wrap_content" 
    android:layout_height="wrap_content" 
    android:padding="8dp"> 

    <ImageView 
     android:id="@+id/screen_shot" 
     android:layout_width="80dp" 
     android:layout_height="80dp" 
     android:contentDescription="@string/hello_world" 
     android:layout_alignParentTop="true" 
     android:scaleType="centerCrop" 
     android:layout_centerHorizontal="true"/> 

    <TextView 
     android:id="@+id/activity_name" 
     android:layout_width="wrap_content" 
     android:layout_height="wrap_content" 
     android:layout_below="@+id/screen_shot" 
     android:layout_alignLeft="@+id/screen_shot" 
     android:text="@string/hello_world" 
     android:inputType="text" 
     android:textColor="#000" 
     android:layout_marginTop="8dp" 
     android:textSize="12sp"/> 

    <TextView 
     android:id="@+id/theme_name" 
     android:layout_width="wrap_content" 
     android:layout_height="wrap_content" 
     android:layout_below="@+id/activity_name" 
     android:layout_alignLeft="@+id/activity_name" 
     android:text="@string/hello_world" 
     android:textSize="12sp" 
     android:layout_marginTop="4dp"/> 

</RelativeLayout> 
</android.support.v7.widget.CardView> 

그러나, 클릭 리스너가 될 것 같지 않습니다 일. 나는 카드보기의 모든 자식보기에서 android:clickablefalse으로 설정하고 카드보기 자체에서 false으로 설정하려했지만 성공하지 못했습니다.

각 행 뷰에 대해 내 CustomAdapter에 클릭 수신기를 설정할 수 있지만 표준 구현을 사용하여 custom action bar을 사용하여 일부 일괄 처리 선택을 수행하고 싶지 않으므로이 방법을 사용하고 싶지 않습니다. 그렇지 않으면 나는 longPress 이벤트로 주위를 어지럽히고 내 행 항목에 대해 checked 상태를 가지고 어댑터 내에서 사용자 지정 작업 표시 줄을 구현하는 데 어려움을 겪습니다.

깨끗한 구현을 위해 내 조각에 click 수신기를 정의하고자합니다. Stackoverflow에 대한 여러 블로그 게시물과 관련 답변을 모두 읽었습니다. 어댑터 접근 방식을 제안하고 아무 것도하지 않고 액티비티 나 프래그먼트에서 올바르게 작동하는 방법을 지정하지 않았습니다.

필자의 경우 OnItemClickListener을 설정하는 것이 불가능한 지 알고 싶습니다. 그렇다면 어떻게 디버깅을하고 문제를 해결할 수 있습니까?

+0

'Rel'안에'CardView' 줄 바꿈 가능 ativeLayout'입니다. 그게 효과가있다. –

+0

카드 뷰에 선형 레이아웃을 사용합니다. –

+0

@VoraAnkit, 방금 게시 한 질문에 대한 반복이 아닙니다. OP는 gridView 구현에서 하위 항목에 대한 다른 클릭 수신기를 갖기를 원합니다. 내 격자보기에 대한'OnItemClickListener'를 구현하고 싶습니다. 문제는 카드보기 때문에 불려지지 않는다는 것입니다. 레이아웃에있는 다른 요소, 즉'ImageView'와'TextView'는 내가 추측 한 행의 클릭 가능성을 방해해서는 안됩니다. –

답변

2

당신은


편집 그리드 항목에

android:descendantFocusability="blocksDescendants" 

를 추가 할 수 있습니다 : 당신이 클릭 차단할 수있는 버튼이있는 경우 그렇지

당신이 추가 할 수 있습니다

android:focusable="false" 
android:focusableInTouchMode="false" 
+0

'android : descendantFocusability = "blocksDescendants"'를 어디서 추가해야합니까? 또한 버튼이 하나도 없으며 레이아웃에 2 개의 텍스트 뷰와 이미지 뷰가 있습니다. –

+0

아아, 내 'RelativeLayout'에 'CardView'를 추가했습니다. 'android : focussable = false ''내 'CardView'에'android : descendantFocusability = "blocksDescendants"를 내 RelativeLayout에 넣으십시오.) 매력처럼 작동합니다! :) –

+0

예 부모 레이아웃에서 descendantFocusability를 추가하십시오 :) –

관련 문제