Android - View Binding

유의선·2024년 4월 22일

안드로이드에선 view들을 참조하고 사용하기 위해서 findViewById(R.id.(view이름)) 을 사용해 view를 참조하고 layout을 inflate 해왔다.

View binding을 사용하면 이 과정을 대체할 수 있다.


먼저 build.gradle에 다음의 코드를 추가한다.

android {
    
    ...

    buildFeatures {
        viewBinding = true;
    }
}

Activity에서의 View Binding 사용법

먼저 Binding Class 객체를 선언한다.

public class MainActivity extends AppCompatActivity {

    private ActivityMainBinding binding;

Binding Class의 이름은 Activity의 이름에 따라 달라진다.

  • XXXActivity : ActivityXXXBinding

여기선 MainActivity 에서 사용하기 때문에 ActivityMainBinding 이 되었다.

그 후 onCreate 메소드 안에서 binding 객체를 만들어준다.

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);

        binding = ActivityMainBinding.inflate(getLayoutInflater());

이 binding 객체를 이용해 layout과 view들을 참조할 수 있다.
binding.(view이름) 으로 해당 view를 참조하여 사용할 수 있다.

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);

        binding = ActivityMainBinding.inflate(getLayoutInflater());

        setContentView(binding.getRoot());

        binding.button.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View view) {
                binding.textView.setText("Binding Test");
            }
        });
    }


Fragment에서의 View Binding 사용법

먼저 Binding Class 객체를 선언한다.

public class BindingFragment extends Fragment {

    private FragmentBindingBinding binding;

Binding Class의 이름은 Fragment의 이름에 따라 달라진다.

  • XXXFragment : FragmentXXXBinding

여기선 BindingFragment 에서 사용하기 때문에 FragmentBindingBinding 이 되었다.

그 후 onCreateView 메소드 안에서 binding 객체를 만들어준다.

    @Override
    public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) {

        binding = FragmentBindingBinding.inflate(inflater, container, false);

이 binding 객체를 이용해 layout과 view들을 참조할 수 있다.
binding.(view이름) 으로 해당 view를 참조하여 사용할 수 있다.

    @Override
    public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) {

        binding = FragmentBindingBinding.inflate(inflater, container, false);

        View rootView = binding.getRoot();

        binding.button.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View view) {
                binding.textView.setText("Fragment View Binding");
            }
        });

        return rootView;
    }

그 후 onDestroyView 메소드에서 Binding Class 객체를 없에는 코드를 넣어
뷰가 제거될 때 Binding Class 객체를 정리해준다.

    @Override
    public void onDestroyView() {
        super.onDestroyView();
        binding = null;
    }


참고 블로그
https://todaycode.tistory.com/29

0개의 댓글