Deperecated/Android_강의

안드로이드 - ListFragment

누알라리 2020. 2. 19. 16:59
1. ListFragment란?

- ListView를 보다 쉽게 사용하기 위해 제공되는 Fragment.

- Fragment 내에 ListView를 사용할 경우 보다 편리하게 구성할 수 있도록 제공되는 Fragment이다.

- ListView의 id가 @android:id/list로 설정되어 있을 경우 자동으로 ListView를 찾아 관리하게 된다.

 

- 일반적으로 리스트뷰를 만드려면 1. 어댑터 생성 2. 어댑터를 리스트뷰에 세팅 3. 필요하다면 리스너 생성이 있어얗는데 이 모든걸 id만 맞추면 자동으로해준다.

 

2. 예제

1. ListView의 id 설정

    <ListView
        android:layout_width="match_parent"
        android:layout_height="match_parent"
        
        android:id="@android:id/list"/>

2. ListFragment()를 상속하는 클래스 생성.

3. 리스트뷰를 구성하기 위한 어댑터 세팅.

4. 리스너 세팅.

class FirstFragment : ListFragment() {

    // 1. 리스트뷰를 구성하기위해 필요한 객체들.
    var textView: TextView? = null
    var list = arrayOf("항목1", "항목2", "항목3")


    override fun onCreateView(inflater: LayoutInflater, container: ViewGroup?,
                              savedInstanceState: Bundle?): View? {

        var view = inflater.inflate(R.layout.fragment_first, container, false)
        textView = view.findViewById<TextView>(R.id.textView3)

        // 2. 어댑터 생성
        var adapter = activity?.let { ArrayAdapter<String>(it, android.R.layout.simple_list_item_1, list) }
        listAdapter = adapter

        return view
    }

    // 3. 리스너 생성
    override fun onListItemClick(l: ListView?, v: View?, position: Int, id: Long) {
        super.onListItemClick(l, v, position, id)

        var str = list[position]
        textView?.text = str
    }
}

5. MainActivity에선 Fragment세팅.

class MainActivity : AppCompatActivity() {

    var list_fragment = FirstFragment()

    override fun onCreate(savedInstanceState: Bundle?) {
        super.onCreate(savedInstanceState)
        setContentView(R.layout.activity_main)

        var tran = supportFragmentManager.beginTransaction()
        tran.replace(R.id.container, list_fragment)
        tran.commit()
    }
}