Android相关问题记录

1.MVP概念与实例

M: 数据层,主要是数据的获得,存储等操作
V : 视图层,主要有activity完成,用于显示和用户交互
P : Presenter层,持有Model,View的引用,让两者进行数据上的交互
下面是一个简单的例子:
首先看一下结构:
这里写图片描述
Model层:继承IstudentModel接口

public class StudentModel implements IStudentModel {
    @Override
    public Student getStudentById(String id) {
        //在这边做数据操作,可以通过网络获取,数据获取等等
        Student bean = new Student();
        bean.setId(id);
        bean.setName("姚明");
        return bean;
    }

    @Override
    public Student getStudentByName(String name) {
        Student bean = new Student();
        bean.setId("10001");
        bean.setName(name);
        return bean;
    }
}

VIEW层:同样继承IStudentView接口

public class MainActivity extends AppCompatActivity implements IStudentView,View.OnClickListener {

    private EditText mNameEt,mIdEt;
    private Button mGetNameByIdBtn,mGetIdByNameBtn;
    private StudentPresenter presenter;
    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
        initView();
    }

    private void initView() {
        presenter = new StudentPresenter(this);
        mNameEt = (EditText) findViewById(R.id.et_xm);
        mIdEt = (EditText) findViewById(R.id.et_xh);
        mGetNameByIdBtn = (Button) findViewById(R.id.btn_xm);
        mGetIdByNameBtn = (Button) findViewById(R.id.btn_xh);
        mGetIdByNameBtn.setOnClickListener(this);
        mGetNameByIdBtn.setOnClickListener(this);
    }

    @Override
    public void setName(String name) {
        mNameEt.setText(name);
    }

    @Override
    public String getId() {
        return mIdEt.getText().toString().trim();
    }

    @Override
    public void setId(String id) {

    }

    @Override
    public void onClick(View view) {
        switch (view.getId()){
            case R.id.btn_xh:
                presenter.setStudentName(getId());
                Log.e("TAG","View id = " + getId());
                break;
        }
    }
}

IStudentView接口

public interface IStudentView {
    void setName(String name);
    void setId(String id);
    String getId();
}

presenter层:持有model和view的引用

/**
 * Created by Administrator on 2016/3/12.
 * 在这边持有IStudentModel,IStudentView的应用
 * 做数据交互
 */
public class StudentPresenter {

    private IStudentModel mModel;
    private IStudentView mView;

    public StudentPresenter(IStudentView view){
        this.mView = view;
        mModel = new StudentModel();

    }
    public void setStudentName(String id){
         Student bean = mModel.getStudentById(id);
         mView.setName(bean.getName());
         Log.e("TAG","id = " + id + ",name = " + bean.getName());
    }

    public void setStudentId(String name){
        Student bean = mModel.getStudentByName(name);
        mView.setId(bean.getId());
    }
}

2.Fragmemt

我相信fragment大家一定用的很多,很多项目是一个Activity加多个fragment来实现的。fragment有占内存小,能提高性能
首先推荐一篇好的博客:Fragment全解析
自己遇到的问题就是在Fragment启动startActivityForResult,如果你在FragmentActivity中有onActivityResult,无论在Fragment中调用的是Fragment还是Activity的startActivityForResult都是会先进入Activity的onActivityResult,如果调用的是fragment的startActivityFotResult想传到fragment中的onActivityResult中就要在activity中加上super.onActivityResult(requestCode,resultCode,data);

 @Override
    public void onActivityResult(int requestCode, int resultCode, Intent data) {
        if (data != null){
            String code = data.getStringExtra("Code");
            ((ScanFragment)storageFragment).setCodeValue(code);
        }
        //传递给Fragment的onActivityResult
        super.onActivityResult(requestCode,resultCode,data);
    }

3.PopupWindow

要给PopupWindow添加背景,才能相应返回键
mPopupWindow.setBackgroundDrawable(new ColorDrawable());

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值