Android, findById() vs binding

이도현·2023년 8월 11일
0

Android 공부

목록 보기
10/30
  1. 개요
    findebyId()로 프로젝트를 진행 중에있는데 다른 팀에서 그거 옛날거야~ 쓰지마~ 해서 찾아보았다.
  • 3.6버전에 binging 기술이 추가되어 findByID()의 안전성과 속도가 보완되었다

1. binding 사용법

1) gradle 추가

// 안드로이드 스튜디오 4.0 이상
android {
    ...
    buildFeatures {
        viewBinding = true
    }
}
// 안드로이드 스튜디오 3.6 ~ 4.0
android {
    ...
    viewBinding {
        enabled true
    }
}

2) MainActivity

 // Java
public class MainActivity extends AppCompatActivity {
 
    private ActivityMainBinding binding;
 
    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        binding = ActivityMainBinding.inflate(getLayoutInflater()); // 1
        setContentView(binding.getRoot()); // 2
    }
 
    private void updateUI(UserProfile userProfile){
        binding.name.setText("아이유"); // 3
        binding.phone.setText("010-1111-2222");
        binding.address.setText("사랑시 고백구 행복동");
    }
}
// kotlin
private lateinit var binding: ActivityMainBinding
 
class MainActivity : AppCompatActivity() {
    override fun onCreate(savedInstanceState: Bundle?) {
        super.onCreate(savedInstanceState)
        binding = ActivityMainBinding.inflate(layoutInflater)
        setContentView(binding.root)
 
        binding.textView.text = "안녕"
    }
}

 // inflate: layout을 객체화 해줌

2. fragment binding

class BlankFragment : Fragment() {
 
    private var _binding: FragmentBlankBinding? = null
    
    // This property is only valid between onCreateView and
    // onDestroyView.
    private val binding get() = _binding!!
 
    override fun onCreateView(
        inflater: LayoutInflater,
        container: ViewGroup?,
        savedInstanceState: Bundle?
    ): View? {
        _binding = FragmentBlankBinding.inflate(inflater, container, false)
        val view = binding.root
        return view
    }
    
    override fun onViewCreated(view: View, savedInstanceState: Bundle?) {
        super.onViewCreated(view, savedInstanceState)
        binding.textView.text = "안녕"
    }
 
    override fun onDestroyView() {
        super.onDestroyView()
        _binding = null
    }
}
  • _binding을 해주지 않으면 binding이 사라지않는다, 프래그먼트는 생명주기가 다름(찾아보기)

viewBindingIgnore

  <androidx.constraintlayout.widget.ConstraintLayout xmlns:android="http://schemas.android.com/apk/res/android"
      xmlns:app="http://schemas.android.com/apk/res-auto"
      xmlns:tools="http://schemas.android.com/tools"
      android:layout_width="match_parent"
      android:layout_height="match_parent"
      tools:viewBindingIgnore="true" // 뷰 바인딩 클래스 생성을 안하고 싶을 때
      tools:context=".HelloActivity">
 
</androidx.constraintlayout.widget.ConstraintLayout>
profile
좋은 지식 나누어요

0개의 댓글