imagebutton으로 listview 행을 클릭 할 수 없습니다.
listview에 문제가 있습니다. 항목 (행)에는 이미지 버튼이 있습니다. imagebutton에는 "android : onClick"이 있으므로 onclick 이벤트는 작동하지만 행 클릭은 작동하지 않습니다. 행 항목에서 이미지 버튼을 제거하면 행 작동을 클릭하십시오 (listview에는 올바른 onclick listner가 있음). 어떻게 고칠 수 있습니까? 사용자가 이미지 버튼을 클릭하고 표준 클릭 이벤트를 클릭 할 때 onclick 이벤트가 필요합니다. 사용자가 행을 선택할 때 (이미지 버튼을 클릭하지 않고 행을 클릭합니다)
내 목록보기 :
<ListView xmlns:android="http://schemas.android.com/apk/res/android"
android:id="@+id/restaurants_list"
android:layout_width="fill_parent"
android:layout_height="fill_parent"
android:divider="@color/list_devider"
android:dividerHeight="1dp"
android:cacheColorHint="@color/list_background" />
운수 나쁘게,
android:focusable="false"
android:focusableInTouchMode="false"
에서 작동하지 않습니다 ImageButton
.
마침내 여기 에서 해결책을 찾았습니다 . 해당 항목에 대한 레이아웃 xml에서
android:descendantFocusability="blocksDescendants"
루트 뷰로.
s ListView
가 있는 경우에 완벽하게 작동합니다 ImageButton
. 기준 공식 , blocksDescendants
(가) 를 의미 포커스를 수신하는 소리 ViewGroup
를 차단한다.
listView에 사용자 지정 어댑터를 사용할 수 있습니다 (아직 사용하지 않는 경우). 그리고 getView(int position, View inView, ViewGroup parent)
어댑터 의 방법에서 다음과 같이하십시오.
@Override
public View getView(int position, View inView, ViewGroup parent) {
View v = inView;
ViewHolder viewHolder; //Use a viewholder for sufficent use of the listview
if (v == null) {
LayoutInflater inflater = (LayoutInflater) adaptersContext.getSystemService(Context.LAYOUT_INFLATER_SERVICE);
v = inflater.inflate(R.layout.list_item, null);
viewHolder = new ViewHolder();
viewHolder.image = (ImageView) v.findViewById(R.id.ImageView);
v.setTag(viewHolder);
} else {
viewHolder = (ViewHolder) v.getTag();
}
.....
viewHolder.image.setOnClickListener(new OnClickListener() {
@Override
public void onClick(View v) {
//Click on imageView
}i
});
v.setOnClickListener(new OnClickListener() {
@Override
public void onClick(View v) {
//Click on listView row
}
});
.....
return (v);
}
사용자 지정 어댑터를 만드는 데 도움이 필요한 경우 여기를 참조 하십시오 .
리스트 뷰의 행에 Button
, Image
.. 등 .. 와 같은 클릭 가능한 요소가 있으면 onItemClick
작동하지 않습니다. 따라서 getView
목록 어댑터 에 클릭 리스너를 작성해야합니다 .
자세한 내용은 출시 제품 .
버튼에 대해 다음 속성을 설정합니다.
android:focusable="false"
android:focusableInTouchMode="false"
또는 어댑터 클래스에서 동적으로 접근 할 수 있습니다.
yourButton.setFocusable(false);
yourButton.setFocusableInTouchMode(false);
그리고 listview에 대해 선택 모드를 단일로 설정했는지 확인하십시오.
listView.setChoiceMode(ListView.CHOICE_MODE_SINGLE);
제 경우에는 android:descendantFocusability="blocksDescendants"
메인 레이어의 경우 ListView에서도 작동하지 않았습니다. 나는 또한 android:focusable="false" android:focusableInTouchMode="false"
그것이 Buttons에서 작동한다고 들었지만 ImageButton을 가지고 있었기 때문에 그것을 시도했습니다.
그러나 레이아웃의 CS 파일에서 버튼의 속성을 설정하면 작동했습니다.
var imageButton = view.FindViewById<ImageButton>(Resource.Id.imageButton1);
imageButton.Focusable = false;
imageButton.FocusableInTouchMode = false;
imageButton.Clickable = true;
행에 클릭 가능한 여러 요소가있는 경우 onItemClick ()이 작동하지 않습니다. 방법 OnClickListener
에서 를 설정해야합니다 getView()
. 리스너를 재활용 할 수 있도록 View의 태그를 저장하고 리스너에 메서드를 추가하여 다른 행에 특화 될 수 있도록합니다.
@Override
public View getView(int position, View convertView, ViewGroup parent) {
View view = super.getView(position, convertView, parent);
RowClickListeners listeners = (RowClickListeners) view.getTag();
if (listeners == null) {
listeners = new RowClickListeners();
}
// Row click listener:
RowClickListener onClickListener = listeners.rowClickListener;
if (onClickListener == null) {
onClickListener = new RowClickListener();
listeners.rowClickListener = onClickListener;
}
onClickListener.setToPosition(pos);
view.setOnClickListener(onClickListener);
// Overflow listener:
View btn = view.findViewById(R.id.ic_row_btn);
ButtonListener btnListener = listeners.buttonClickListener;
if (rowListener == null) {
btnListener = new ButtonListener(activity);
listeners.rowClickListener = btnListener;
}
btnListener.setToPosition(pos);
btnListener.setCollection(collectionId);
btn.setOnClickListener(btnListener);
}
public static class RowClickListeners {
public RowClickListener rowClickListener;
public ButtonListener buttonClickListener;
}
위의 단일 답변은 나에게 효과가 없었지만 조합은 효과적이었습니다.
I가 설정 android:descendantFocusability="blocksDescendants"
ListView에와 android:focusable="false" android:focusableInTouchMode="false"
는 XML의 ImageButtons에 AND 도 설정 자바 I에서 descendantFocusability(ViewGroup.FOCUS_BLOCK_DESCENDANTS)
ListView에와 focusable(false), focusableInTouchMode(false), clickable(true)
ImageButtons에.
참조 URL : https://stackoverflow.com/questions/11428303/cant-click-on-listview-row-with-imagebutton
'ProgramingTip' 카테고리의 다른 글
루비에서 날짜의 요일을 어떻게 계산할 수 있습니까? (0) | 2020.12.26 |
---|---|
여러 줄이있는 UILabel에서 자동 축소 (0) | 2020.12.26 |
@PropertySource 주석을 사용할 때 @Value가 확인되지 않습니다. (0) | 2020.12.26 |
Android 스튜디오 : Gradle 새로 고침 실패 -com.android.tools.build:gradle:2.2.0-alpha6을 제거 수 없음 (0) | 2020.12.26 |
UIScrollView에서 페이지 변경 (0) | 2020.12.26 |