programing

ListView 내부의 ListView 및 버튼

nasanasas 2020. 12. 14. 08:26
반응형

ListView 내부의 ListView 및 버튼


Button내부 를 표시하고 싶습니다 ListView. 목표는 ListView선이나 버튼을 클릭하는 것입니다.

선을 클릭하면 자세한 정보가 표시됩니다. 하단에 더 많은 버튼이 표시되는 버튼을 클릭하십시오.

GMAIL 앱과 동일합니다.

오른쪽에 체크 박스가 있고 하단 체크 박스를 클릭하면 버튼 바가 나타납니다.

내 문제는 버튼을에 삽입 한 후 버튼을 ListView클릭 할 수 없다는 것입니다. LinearLayout버튼에서에 추가하면 llButton.setClickable()작동합니다. 하지만 버튼 만. ListView자체는 더 이상 클릭에 반응하지 않습니다!

나는 이 예를 시도했다 .

위와 같은 문제 ...


사용자 지정 어댑터를 사용하는 경우 ListView 내부에서 Button 클릭이 작동하지 않으므로 다음 코드를 사용하여 OnItemClickListener.

listId.setOnItemClickListener(new AdapterView.OnItemClickListener() {
   public void onItemClick(AdapterView<?> list, View v, int pos, long id) {
      // Your code for item clicks
   }
});

이것을 명확히하기 위해 – 그리고 아무도 이렇게 간단한 것을 말하지 않은 것 같습니다 –리스트 뷰와 함께 초점을 맞출 수있는 버튼이 작동하는 것은 허용되지 않지만, 이것에 대한 훨씬 더 간단한 해결책이 있습니다.

허용되는 대답은 주어진 것입니다. 목록 항목에 대한 클릭 리스너를 설정할 때 항상 그렇게해야합니다. 그래서 OP가 그것을 몰랐다는 것은 어리석은 일입니다.

XML 레이아웃을 목록 항목으로 사용하는 경우 다음 속성을 갖도록 버튼을 설정하면 목록 항목도 클릭 할 수 있습니다.

android:focusable="false"


목록 항목 XML에 아래 행을 추가하십시오.

android:descendantFocusability="blocksDescendants"

그러면 목록 항목은 다음과 같습니다.

<?xml version="1.0" encoding="utf-8"?>
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="match_parent"
android:descendantFocusability="blocksDescendants"
android:layout_height="wrap_content" >

    // Your layout objects here

</RelativeLayout>

버튼 또는 목록 항목을 클릭 할 때 이벤트가 트리거되도록하려면 다음을 수행 할 수 있습니다.

onItemClick 만 처리합니다.

mListView.setOnItemClickListener(new ListView.OnItemClickListener() {
    @Override
    public void onItemClick(AdapterView<?> a, View v, int i, long l) {
        // handle click here
    }
);

어댑터에서 버튼을 클릭하거나 초점을 맞출 수 없도록 수정합니다 (또는 대신 xml 파일에서 수행).

public class MyAdapter extends BaseAdapter {
    ...
    public View getView(int position, View convertView, ViewGroup parent) {
        .....  
        Button btn = view.findViewById(R.id.button);
        btn.setFocusable(false);
        btn.setClickable(false);               
    }
}

제 경우에는이 속성을 listView에 추가해야했습니다.

<ListView
...
android:clickable="true"
...
</ListView>

그리고 어댑터에서 버튼보기에 클릭 리스너를 추가하십시오.

wrapper.getButtonHi().setOnClickListener(new OnClickListener() {

        @Override
        public void onClick(View arg0) {
            // TODO Auto-generated method stub
            DebugUtils.logDebug("Clickeado :: "+ mContact.getUserId());
        }
});

최종 변수를 설정하는 것이 중요합니다.

public View getRowView(final int position, View convertView, ViewGroup parent) {
    final BrowseContactItemWrapper wrapper;
    final UserModel mContact = lstContact.get(position);
    .....
}

참고 URL : https://stackoverflow.com/questions/3045872/listview-and-buttons-inside-listview

반응형