Android 진급---android databinding 사용

1.설정,
  • module 에
  • 을 추가 합 니 다.
    android {   
         ....   
         dataBinding {        
           enabled = true   
         }
    }

    2.기초 사용
  • 간단 한 model 실체 류
  • 만 들 기
    public class SwordMan{
        private String name;
        private String level;
    
        public SwordMan(String name, String level) {
            this.name = name;
            this.level = level;
        }
    
        public String getName() {
            return name;
        }
    
        public void setName(String name) {
            this.name = name;
        }
    
    
        public String getLevel() {
            return level;
        }
    
        public void setLevel(String level) {
            this.level = level;
    
        }
    }
  • 레이아웃 파일 작성:루트 레이아웃 이 layot
  • 으로 바 뀌 어야 합 니 다.
    
    <layout xmlns:android="http://schemas.android.com/apk/res/android">
    
        <data>
    
            <variable
                name="swordsman"
                type="com.light.testdatabinding.SwordMan" />
        data>
    
        <LinearLayout
            android:layout_width="wrap_content"
            android:layout_height="match_parent"
            android:orientation="vertical">
            <TextView
                android:layout_width="wrap_content"
                android:layout_height="wrap_content"
                android:text="@={swordsman.name}" />
            <TextView
                android:layout_width="wrap_content"
                android:layout_height="wrap_content"
                android:text="@{swordsman.leval}" />
        LinearLayout>
    
    layout>
  • activey 에서 귀속 사용
  • ActivityMainBinding binding = DataBindingUtil.setContentView(this,R.layout.activity_main);
    SwordMan swordMan=new SwordMan("  ","   ");
    binding.setSwordsman(swordMan);
  • 보충 이상 은 databing 기초 에서 사용 하 는 것 입 니 다.저 희 는 실체 류 에 값 을 부여 한 후에 textview 의 text 가 자동 으로 변 합 니 다.Activity MainBinding 은 바 인 딩 된 레이아웃 이름 에 따라 자동 으로 생 성 됩 니 다.그것 의 역할 은 하나의 대체 류
  • 을 배치 하 는 것 과 같다.
    3.지식 설명,API 문서 읽 기 자세히 소개
  • 개의 레이아웃 layot 를 대체 하고 안의 레이아웃 은 변 하지 않 습 니 다
  • data 노드 는 관련 정의 데 이 터 를 사용 합 니 다.안의 variable 노드(한 노드 는 하나의 실체 류 에 해당 합 니 다):name 속성 은 변수의 명작 을 나타 내 고 type 은 변수의 유형 을 나타 냅 니 다.import 노드 는 같은 종류의 가방 을 가 져 옵 니 다.그의 사용 은 type 과 유사 합 니 다.아래 와 같다.
  •   <data>
            <import type="java.util.Date"/>
    
            <variable
                name="swordsman"
                type="com.light.testdatabinding.SwordMan" />
            <variable
                name="time"
                type="Date" />
        </data>
  • 우리 가 하나의 레이아웃 을 연결 한 후에 대상 을 통 해 id 를 직접 얻 을 수 있 습 니 다.test 는 바로 레이아웃 안의 textview id
  • 입 니 다.
    ActivityMainBinding binding = DataBindingUtil.setContentView(this,R.layout.activity_main);
    binding.test.setText("  ");
  • 이벤트 처리:binding 대상 을 통 해 id
  • 을 직접 조작 합 니 다.
     binding.btnTest.setOnClickListener(new View.OnClickListener() {
                @Override
                public void onClick(View view) {
                    swordMan.setName("  ");
                    startActivity(new Intent(MainActivity.this,Main2Activity.class));
                }
            });

    4.recyclerview 데이터 바 인 딩 사용
  • recyclerviewer 레이아웃
  • 
    <layout xmlns:android="http://schemas.android.com/apk/res/android">
    
        <LinearLayout
            android:layout_width="match_parent"
            android:layout_height="match_parent"
            android:orientation="vertical">
            <android.support.v7.widget.RecyclerView
                android:id="@+id/recycler"
                android:layout_width="match_parent"
                android:layout_height="match_parent">
    
            android.support.v7.widget.RecyclerView>
        LinearLayout>
    
    layout>
  • recyclerviewer 항목 레이아웃
  • 
    <layout xmlns:android="http://schemas.android.com/apk/res/android">
    
        <data>
    
            <import type="com.light.testdatabinding.OBSwordMan" />
    
            <variable
                name="swordman"
                type="OBSwordMan" />
        data>
    
        <LinearLayout
            android:layout_width="match_parent"
            android:layout_height="200dp"
            android:orientation="vertical">
    
            <TextView
                android:layout_width="match_parent"
                android:layout_height="wrap_content"
                android:text="@{swordman.name}" />
    
            <TextView
                android:layout_width="match_parent"
                android:layout_height="wrap_content"
                android:text="@{swordman.level}" />
        LinearLayout>
    
    layout>
    
  • 실체 류
  • 
    public class OBSwordMan extends BaseObservable {
        private String name;
        private String level;
    
        public OBSwordMan(String name, String level) {
            this.name = name;
            this.level = level;
        }
    
        public String getName() {
            return name;
        }
    
        public void setName(String name) {
            this.name = name;
        }
    
        public String getLevel() {
            return level;
        }
    
        public void setLevel(String level) {
            this.level = level;
    
        }
    }
    
  • recyclerview Adapter 생 성,RvItemBinding 류 는 레이아웃 이름 으로 생 성 된 클래스
  • 
    public class SwordmanAdapter extends RecyclerView.Adapter<SwordmanAdapter.SwordmamViewHoler> {
        private List manList;
    
        public SwordmanAdapter(List manList) {
            this.manList = manList;
        }
    
        @Override
        public SwordmamViewHoler onCreateViewHolder(ViewGroup parent, int viewType) {
            RvItemBinding binding = DataBindingUtil.inflate(LayoutInflater.from(parent.getContext()), R.layout.rv_item, parent, false);
            return new SwordmamViewHoler(binding);
        }
    
        @Override
        public void onBindViewHolder(SwordmamViewHoler holder, int position) {
            OBSwordMan swordMan = manList.get(position);
            holder.getBinding().setSwordman(swordMan);
    
        }
    
        @Override
        public int getItemCount() {
            return manList.size();
        }
    
        public class SwordmamViewHoler extends RecyclerView.ViewHolder {
            RvItemBinding binding;
    
            public SwordmamViewHoler(ViewDataBinding binding) {
                super(binding.getRoot());
                this.binding = (RvItemBinding) binding;
            }
    
            public RvItemBinding getBinding() {
                return binding;
            }
        }
    }
    
  • activity 에서
  • 실현
    public class Main2Activity extends AppCompatActivity {
        private ActivityMain2Binding binding;
    
        @Override
        protected void onCreate(Bundle savedInstanceState) {
            super.onCreate(savedInstanceState);
            binding = DataBindingUtil.setContentView(this, R.layout.activity_main2);
            initRecycler();
    
        }
    
        private void initRecycler() {
            LinearLayoutManager manager = new LinearLayoutManager(this);
            binding.recycler.setLayoutManager(manager);
            SwordmanAdapter adapter = new SwordmanAdapter(getList());
            binding.recycler.setAdapter(adapter);
        }
    
        public List getList() {
            List list = new ArrayList<>();
            OBSwordMan obSwordMan = new OBSwordMan("  ", "      ");
            OBSwordMan obSwordMan2 = new OBSwordMan("  1", "      ");
            OBSwordMan obSwordMan3 = new OBSwordMan("  2", "      ");
            OBSwordMan obSwordMan4 = new OBSwordMan("  3", "      ");
            OBSwordMan obSwordMan5 = new OBSwordMan("  4", "      ");
            list.add(obSwordMan);
            list.add(obSwordMan2);
            list.add(obSwordMan3);
            list.add(obSwordMan4);
            list.add(obSwordMan5);
            return list;
        }
    }
    

    좋은 웹페이지 즐겨찾기