• 카테고리

    질문 & 답변
  • 세부 분야

    모바일 앱 개발

  • 해결 여부

    미해결

ListView를 ExpandableListView로 가능할까요.

22.12.22 23:40 작성 조회수 360

0

강의 잘 듣고 있습니다.

바쁘신줄 알지만 한가지 부탁드리고 싶습니다.

코딩의 민족 상편에서 ListView를 ExpandableListView로 코딩이 가능할까요....즉, 부모아이템 아래 자식아이템이 몇개 보이도록 하고 싶은데 가능할까요. 어느 부분을 수정해야 하나요. 이것하나 전수 부탁드립니다...

답변 1

답변을 작성해보세요.

0

안녕하세요 허정님!

ExpandableListView 에 문의를 메일로 몇주전에 주신 것으로 보이는데, 아직 해결이 안되셨군요...

제가 이거는 직접 코딩해서 공유드리겠습니다.

그냥 단순한 ExpandableListView 면 될까요 아니면 원하시는 특정한 형태가 있으실까요?

그리고 강의를 여러개 구매하신 것으로 보이는데 아래 순서대로 수강하시는 것이 수강에 가장 효율적이니 추천드립니다.

  1. [입문편] 안드로이드를 위한 코틀린 문법

  2. [왕초보편] 앱 8개를 만들면서 배우는 안드로이드 코틀린

  3. [초급편] 커뮤니티 앱 만들기

  4. [초중급편] 데이팅 앱 만들기 

  5. [중급편] 친절한 JETPACK 개론 <상>

  6. [중급편] 코인 가격 모니터링 앱 제작

어떤 형태를 원하시는지 알려주시면 코딩해서 공유드릴게요~

 

 

안녕하세요.

아들! 기숙사 철수하면서 토요일 일요일은 멀리가서 이제 보았습니다. 50대 중반에 코딩을 시작하려니 어려움이 많습니다. 재미있기도 하고요. 다른 언어는 전혀 모르고요. 그냥 무작정 코틀린부터 시작했습니다.

서두가 길었군요.

질문.png엑셀로 만들어 보았습니다.

인터넷이나 유튜브에는 탭뷰없이는 몇개 있습니다. 대부분은 자바언어로 있으며 저는 탭뷰에 expandablelistview나 expandablerecycler를 원합니다.

감사합니다.

새해에는 복 많이 받으시고 건강하세요.

image

저 혹시 이런 형태가 맞나요?

https://notepad96.tistory.com/198

여기에 코드가 있는데 만약 제가 잘못 이해했다면 알려주세요.

수정해서 코드를 보내드리겠습니다.

 

tab layout과 붙이고 싶으시다면 https://jwsoft91.tistory.com/52 를 참고해주세요.

 

혹시 직접 작업하고 계신 것이 있는데, 막히는 부분이 있다면 막히는 부분과 함께 코드를 공유해주세요~

 

 

저 위의 expandableRecyclerView에서 viewbinding을 사용하고 있는데

https://www.youtube.com/watch?v=BAE26bGTwKA

viewbinding을 잘 모르시면 이 영상을 참고해주세요~

안녕하세요?

개복치개발자님!

좋은 조언 감사합나다.

위 notepad96님이 만드신 형태는 맞습니다만 부모아이템에서 "커피" 텍스트 앞에 이미지1과 "커피" 텍스트 뒤에 이미지2를 넣고 다시 아미지 뒤에 텍스트를 넣고 싶은데 이게 잘 안됩니다.

그리고 자식아이템 "아메리카노" 뒤에 이미지를 넣고 싶습니다.

현재 직접 작업 할수 있는 수준은 아니고요, 개복치 개발자님이 가르쳐주신 코딩의 민족 상편 일부와 저가 만들고 싶은 것이 비슷합니다.

사실 notepad96님 것으로 몇번 시도해 보았습니다. 아직 수정할수 있는 단계도 아닙니다만 전반적인 코딩 이해도도 낮아 많이 어렵습니다.

구글링해가며 시도했으나 잘안됩니다.

내년에는 개복치 개발자님의 조언데로 다시 입문부터 순서대로 공부하려합니다.

연말에 바쁘신데 정말 죄송합니다.

수고하세요.

 

아닙니다 당연히 도와드려야죠~

혹시 지금 작업하고 계신 코드가 있으실까요?

uyalae@naver.com 으로 코드 압축해서 전송해주시면 저 그림처럼 만들어서 회신드리겠습니다 :)

image

제가 조금 수정을 했습니다.

https://notepad96.tistory.com/198

위의 코드에서 조금 수정했고

ListAdapater 코드

 

package com.notepad96.recyclerviewexpandable

import android.content.Intent
import android.graphics.drawable.Drawable
import android.view.LayoutInflater
import android.view.View
import android.view.ViewGroup
import android.widget.ImageView
import android.widget.TextView
import androidx.recyclerview.widget.RecyclerView
import com.notepad96.recyclerviewexpandable.databinding.ItemListBinding

class ListAdapter: RecyclerView.Adapter<ListAdapter.MyView>() {
    val data = mapOf(
        "커피" to listOf("아메리카노", "바닐라라떼", "카페라떼", "카페모카"),
        "프라페" to listOf("녹차프라페", "커피프라페", "쿠키프라페"),
        "에이드" to listOf("레몬에이드", "자몽에이드"),
        "음료" to listOf("나랑드", "토레타")
    )

    inner class MyView(private val binding: ItemListBinding): RecyclerView.ViewHolder(binding.root) {
        init {
            binding.layout01.setOnClickListener {
                if(binding.layoutDetail01.visibility == View.VISIBLE) {
                    binding.layoutDetail01.visibility = View.GONE
                    binding.layoutBtn01.animate().apply {
                        duration = 200
                        rotation(0f)
                    }
                } else {
                    binding.layoutDetail01.visibility = View.VISIBLE
                    binding.layoutBtn01.animate().apply {
                        duration = 200
                        rotation(180f)
                    }
                }
            }
        }

        fun bind(pos: Int) {
            binding.textView01.text = data.keys.elementAt(pos)
            data.values.elementAt(pos).forEach {
                val view = TextView(binding.root.context).apply {
                    text = "· $it"
                    textSize = 20f
                    setPadding(10, 10, 5, 10)
                }

                val intent = Intent(binding.root.context, DetailActivity::class.java)
                    .putExtra("name", view.text.toString())

                view.setOnClickListener {
                    binding.root.context.startActivity(intent)
                }

                val view2 = ImageView(binding.root.context)
                view2.setImageResource(R.drawable.ic_launcher_background)

                binding.layoutDetail01.addView(view)
                binding.layoutDetail01.addView(view2)
            }
        }
    }

    override fun onCreateViewHolder(parent: ViewGroup, viewType: Int): MyView {
        val view = ItemListBinding.inflate(LayoutInflater.from(parent.context), parent, false)
        return MyView(view)
    }

    override fun onBindViewHolder(holder: MyView, position: Int) {
        holder.bind(position)
    }

    override fun getItemCount(): Int {
        return data.size
    }
}

 

item_list.xml 코드입니다

 

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:layout_width="match_parent"
    android:layout_height="wrap_content"
    xmlns:app="http://schemas.android.com/apk/res-auto"
    android:orientation="vertical"
    android:animateLayoutChanges="true"
    android:layout_margin="5dp">

    <com.google.android.material.card.MaterialCardView
        android:id="@+id/layout01"
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        app:strokeWidth="1dp"
        app:cardCornerRadius="3dp"
        app:strokeColor="@color/black">

        <ImageView
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:src="@drawable/ic_launcher_foreground"/>

        <TextView
            android:paddingLeft="100dp"
            android:id="@+id/textView01"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:layout_margin="10dp"
            android:layout_gravity="center_vertical"
            android:text="Layout 01"
            android:textColor="@color/black"
            android:textSize="22sp" />
        <ImageButton
            android:id="@+id/layoutBtn01"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:layout_margin="10dp"
            android:src="@drawable/arrow_up"
            android:clickable="false"
            android:background="@android:color/transparent"
            android:layout_gravity="right"
            android:textSize="22sp" />
    </com.google.android.material.card.MaterialCardView>

    <LinearLayout
        android:id="@+id/layoutDetail01"
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:orientation="vertical"
        android:visibility="gone"
        android:background="#D8D7D7">

    </LinearLayout>

</LinearLayout>

한번 살펴보시겠어요?

여기에서 이것저것 시도해보시고 안되시면 전체 코드와 함께 공유해주세요.

개복치개발자님!

친절한 답변 감사합니다.

연말연시 잘보내시고 새해에는 더욱더 활기찬 한해가 되시길 기원합니다.

저가 생각하는 것과 약간 차이가 있어 다시 여쭙습니다.

아래 그림 참조하세요.

image

image

선생님이 주신것을 실행해보니 이렇게 되었습니다

부모아이템 A부분은 다른 것으로 바꿀수가 없더군요.

그리고 자식아이템 ㄱㄱㄱ부분도 다른 것으로 바꿀수가 없는듯합니다.

아님 저가 아직 수준이 부족하여 이해 못할수도 있습니다.

아래 그림은 선생님께서 교육하신 코딩의 민족 상편을 저가 약간 수정한것입니다.

여기에 expandable recyclerview (자식아이템) 만 그림처럼 추가하시면 됩니다.

[아래 그림은 이해를 돕기위해 이미지 편집한 것입니다.]

image

image

image

조금 복잡합니다.

어제 저녁에 답변받고 잠을 못잤습니다.

너무 좋았습니다.

밤샘 테스트해보다 잘 안되어 다시 질문드립니다.

플레이스토어에 찾아보니 내용은 틀리나 [위험물 암기]와 비슷 합니다.

죄송합니다.

새해 복 많이 받으세요.