안드로이드 pull to refresh(당겨서 새로고침)

·2022년 2월 20일
0

이쁜 디자인을 쓰려면 외부 라이브러리를 사용해야한다.
나는 안드로이드 기본 레이아웃을 쓸것임.

먼저 gradle에 추가해줘야한다.
https://developer.android.com/jetpack/androidx/releases/swiperefreshlayout?hl=ko
여기를 가면 최신버전을 찾을 수 있다.

나는 간단하게 타이머를 만들어서 위로 당기면 처음부터 다시 시작하는 것을 구현했다.

*데이터바인딩을 사용했음.

<data>

    <variable
        name="click"
        type="android.view.View.OnClickListener" />
</data>

<androidx.swiperefreshlayout.widget.SwipeRefreshLayout
    android:id="@+id/refresh"
    android:layout_width="match_parent"
    android:layout_height="match_parent">
    
    <androidx.constraintlayout.widget.ConstraintLayout
        android:layout_width="match_parent"
        android:layout_height="match_parent">

        <TextView
            android:id="@+id/tv_title"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            app:layout_constraintBottom_toBottomOf="parent"
            app:layout_constraintLeft_toLeftOf="parent"
            app:layout_constraintRight_toRightOf="parent"
            app:layout_constraintTop_toTopOf="parent" />

        <Button
            android:id="@+id/btn_start"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:onClick="@{click}"
            android:text="start"
            app:layout_constraintBottom_toBottomOf="parent"
            app:layout_constraintEnd_toEndOf="parent"
            app:layout_constraintHorizontal_bias="0.272"
            app:layout_constraintStart_toStartOf="parent" />

        <Button
            android:id="@+id/btn_stop"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:onClick="@{click}"
            android:text="stop"
            app:layout_constraintBottom_toBottomOf="parent"
            app:layout_constraintEnd_toEndOf="parent"
            app:layout_constraintStart_toStartOf="@id/btn_start" />
    </androidx.constraintlayout.widget.ConstraintLayout>
</androidx.swiperefreshlayout.widget.SwipeRefreshLayout>

SwipeRefreshLayout으로 감싸주면 된다.

isRefreshing=false

이 옵션을 써줘야 refresh됐을때 프로그래스바?가 계속 안돈다.

class MainActivity : AppCompatActivity(), View.OnClickListener {
    lateinit var binding: ActivityMainBinding
    lateinit var job:Job

    override fun onCreate(savedInstanceState: Bundle?) {
        super.onCreate(savedInstanceState)
        binding = DataBindingUtil.setContentView(this,R.layout.activity_main)
        binding.click=this

        binding.refresh.setOnRefreshListener {
            binding.refresh.isRefreshing=false
            job.cancel()
            startTimer()
        }
    }

    override fun onClick(view: View?) {
        when(view?.id){
            R.id.btn_start -> {
                startTimer()
            }
            R.id.btn_stop -> {
                job.cancel()
            }
        }
    }

    private fun startTimer() {
        var time = 0
        job= CoroutineScope(Dispatchers.Default).launch {
            while (true){
                delay(1000)
                time++
                withContext(Dispatchers.Main){
                    binding.tvTitle.text=time.toString()
                }
            }
        }
    }
}

성공!

profile
가보자고

0개의 댓글

관련 채용 정보