Android MVVM 은 DataBinding 의 간단 하고 실 용적 인(Android studio)및 자신 이 만난 구덩이 와 결합 합 니 다.

사용 절차:
1.build.gradle 에 다음 과 같이 추가 합 니 다.
  android {
      dataBinding {
          enabled = true
      }
      ...........

2.저 는 Activity 와 Fragment 를 위해 각각 Base 를 썼 습 니 다.
BaseActivity.java
//  BaseActivity   
public abstract class BaseActivity extends FragmentActivity implements View.OnClickListener {

protected SV bindingView;
//   findViewById();
protected  T getView(int id) {
    return (T) findViewById(id);
}

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

    bindView();   
    initViews();
}
//   BindingView
protected void bindView() {
    bindingView = DataBindingUtil.setContentView(this, getLayoutResId());
}
//    
protected abstract int getLayoutResId();
//   
public abstract void initViews();

public abstract void processClick(View v);

public void onClick(View v) {
    processClick(v);
}

}
BaseFragment.java
public abstract class BaseFragment extends Fragment implements View.OnClickListener {
protected SV bindingView;
private View view;

@Override
public void onCreate(@Nullable Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
}

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

    view = getActivity().getLayoutInflater().inflate(setContent(), container, false);
    bindingView = DataBindingUtil.bind(view);
    initView();
    setData();
    return view;
}

protected  T getView(int id) {
    return (T) view.findViewById(id);
}

/**
 *   
 */
public abstract int setContent();

/**
 *      
 */

public abstract void initView();

public abstract void setData();

public abstract void processClick(View v);

@Override
public void onClick(View v) {
    processClick(v);
}

}
4.구체 적 인 코드,인터페이스 에 데 이 터 를 보 여 달라 고 요청(Activity 의 경우)
1>.요청 한 데이터 에 따라 실체 클래스 를 작성 합 니 다.제 것 은 다음 과 같 습 니 다.
인터페이스 가 좀 엉망 이어서 실체 류 는 아 쉬 운 대로 볼 것 이다.
 public class WatingModel {
    private String id;
    private String doctor_name;
    private String patient;
    private String department_name;
    private String department_area;
    private String wait;
    private String nowid;
    private String nowtime;
     private String go_time;

    public String getStatus() {
        return status;
    }

    public void setStatus(String status) {
        this.status = status;
    }

    private String status;

    public String getNowtime() {
        return nowtime;
    }

    public void setNowtime(String nowtime) {
        this.nowtime = nowtime;
    }

    public String getId() {
        return id;
    }

    public void setId(String id) {
        this.id = id;
    }

    public String getDoctor_name() {
        return doctor_name;
    }

    public void setDoctor_name(String doctor_name) {
        this.doctor_name = doctor_name;
    }

    public String getPatient() {
        return patient;
    }

    public void setPatient(String patient) {
        this.patient = patient;
    }

    public String getDepartment_name() {
        return department_name;
    }

    public void setDepartment_name(String department_name) {
        this.department_name = department_name;
    }

    public String getDepartment_area() {
        return department_area;
    }

    public void setDepartment_area(String department_area) {
        this.department_area = department_area;
    }

    public String getWait() {
        return wait;
    }

    public void setWait(String wait) {
        this.wait = wait;
    }

    public String getNowid() {
        return nowid;
    }

    public void setNowid(String nowid) {
        this.nowid = nowid;
    }


    public String getGo_time() {
        return go_time;
    }

    public void setGo_time(String go_time) {
        this.go_time = go_time;
    }

}
2.배치
몇 가지 주의 할 점:
1>가장 바깥쪽 레이아웃 용
2>데이터 원본
3>안에 속성 이 있 습 니 다.name 은 코드 에 있 는 실체 클래스 의 대상 type 입 니 다.type 은 실체 클래스 이 고 가방 이름 은 클래스 이름 입 니 다.
4>할당:컨트롤 의 text 속성 에서 직접 할당:eg.android:text="@{model.departmentname}"글 을 쓸 때 알림 이 있 습 니 다.


    
     

     

      

     

        

                            
                

                    

                    
                

                

                    

                    
                

                

                    

                    
                

                

                    

                    
                

                

                    

                    
                           
            
        
    


3.코드 에서 동작:
public class Waiting Details Activity extends BaseActivity{/binding 이름 은 레이아웃 이름 입 니 다.낙타 봉 명명 법 에 따라 쓰기+Binding 으로 결정 합 니 다.
private TextView title;
private Dialog progressDialog;
private String card_id, id;
private WatingModel.Data model;//   

@Override
protected int getLayoutResId() {
    return R.layout.activity_waiting;//  
}

@Override
public void initViews() {
    //   
    progressDialog = LabelUtils.createLoadingDialog(WaitingDetailsActivity.this, "   ...", true, 0);
    card_id = getIntent().getStringExtra("card_id");
    id = getIntent().getStringExtra("id");
    title = getView(R.id.title);//       bindingView.          ;
    getView(R.id.back).setOnClickListener(this);
    title.setText("  ");
    //bingView.         ,  fandViewById();
    bindingView.refresh.setOnClickListener(this);
    getData();
}

@Override
public void processClick(View v) {
    switch (v.getId()) {
        case R.id.back:
            finish();
            break;
    }
}
Handler handler = new Handler(new Handler.Callback() {
    @Override
    public boolean handleMessage(Message msg) {
        progressDialog.dismiss();
        if (msg.what == 1) {
            String result = msg.obj.toString();
            try {
                JSONObject json = new JSONObject(result);
                String code = json.getString("code");
                boolean status = json.getBoolean("status");
                String info = json.getString("info");
                if (status) {
                    JSONArray array = json.getJSONArray("data");
                    JSONObject jsonObject = array.getJSONObject(0);
                    Gson gson = new Gson();
                    model = gson.fromJson(jsonObject.toString(), WatingModel.Data.class);
                    bindingView.setModel(model);//      ,       ,   ,           ,          ,         name;
                } else {
                    LabelUtils.toast(WaitingDetailsActivity.this, code + info);
                }
            } catch (JSONException e) {
                e.printStackTrace();
            }
        } else if (msg.what == 3) {
            LabelUtils.toast(WaitingDetailsActivity.this, getResources().getString(R.string.quest_fail));
        }
        return false;
    }
});

public void getData() {
    progressDialog.show();
    HashMap map = new HashMap<>();
    map.put("card_id", card_id + "");
    map.put("member_id", LoginDataModel.getLoginData().getMember_id() + "");
    OkhttpTool.getNetData("    ", map).enqueue(new Callback() {
        @Override
        public void onFailure(Call call, final IOException e) {
            Message msg = new Message();
            msg.what = 3;
            handler.sendMessage(msg);
        }

        @Override
        public void onResponse(Call call, Response response) throws IOException {
            String result = response.body().string();
            if (response.isSuccessful()) {
                Message msg = new Message();
                msg.what = 1;
                msg.obj = result;
                handler.sendMessage(msg);
            } else {
                Message msg = new Message();
                msg.what = 3;
                handler.sendMessage(msg);
            }
        }
    });
}

}
간단하게 사용 해서 여기까지 소 개 했 습 니 다.코드 의 양 이 많 지만 간단 합 니 다.제 가 사용 하 는 과정 에서 겪 은 문제 들 을 말씀 드 리 겠 습 니 다.
1.DataBinding 사용 중 레이아웃 과 관련 된 것 을 포함 하여 오류 가 있 으 면 단체 로 오 류 를 보고 할 수 있 으 므 로 작성 할 때 반드시 자세하게 해 야 합 니 다.
2.layot 구 조 는 그의 직접적인 서브 레이아웃 속성 과 함께 사용 되 고 중복 되면 오 류 를 보고 할 수 있 습 니 다.이 문 제 는 저 로 하여 금 오전 내 내 알 게 했 습 니 다.제 잘못 은 layot 가 배경 을 추가 하고 그의 직접적인 서브 레이아웃 도 배경(제 프로젝트 가 필요 합 니 다)을 추가 한 것 입 니 다.결 과 는 충돌 합 니 다.이런 구 조 는 전체 프로젝트 를 마비 시 키 고 보 고 된 오 류 는 마지막 줄 을 자세히 보 았 습 니 다.속성 중복...

좋은 웹페이지 즐겨찾기