代码之家  ›  专栏  ›  技术社区  ›  Tenten Ponce

无论活动或片段是什么,都创建通用/基本窗体类

  •  0
  • Tenten Ponce  · 技术社区  · 6 年前

    我正在尝试创建一个通用/基本窗体,不管它是否是 activity fragment . 为了简单起见, Form 可以提交:

    class BaseFormActivity extends AppCompatActivity {
    
      public abstract void submitForm();
    
      @Override
      public void setContentView(int layoutResID) {
        ConstraintLayout activityBaseForm = (ConstraintLayout) getLayoutInflater().inflate(R.layout.activity_base_form, null);
        FrameLayout frameBaseForm = activityBaseForm.findViewById(R.id.frame_base_form);
    
        getLayoutInflater().inflate(layoutResID, frameBaseForm, true);
    
        findViewById(R.id.btn_submit).setOnClickListener(v -> submitForm()) // for the sake of simplicity, there's a button that will trigger submitForm() method
    
        super.setContentView(activityBaseForm);
      }
    }
    

    这里,我只包括表单的一些默认布局,以及触发抽象方法的提交按钮。 submitForm() . 但是,这只适用于Android activities . 我怎么能把这个也卖出去呢 fragments 不写 BaseFormFragment ?我不想重复默认行为 活动 片段 反之亦然。

    1 回复  |  直到 6 年前
        1
  •  0
  •   Geo    6 年前

    将其视为示例演示者类,该类处理按钮单击并获取所有表单字段并发送到服务器

    public class MyPresenter {
         private MyPresenterIView iViewInstance;
    
            public MyPresenter(MyPresenterIView iView){
              this.iViewInstance=iView;
            }
    
            public void onSubmitClick(){
              //write your logic here
             String fieldOneText=iViewInstance.getFieldOneText();
             sendToServer(fieldOneText);
            }
    
            private void sendToServer(String stringInfo){
            //send info to server
            }
    
        }
    

    MyPresenteriView界面

    public interface MyPresenterIView{
      String getFieldOneText();
    }
    

    在活动或片段中使用演示者

    //implement MyPresenterIView to your Activity or Fragment 
    public class MyActivity extent SomeActivity implements MyPresenterIView{
    private MyPresenter myPresenter;
    
    //in onCreate or onCreateView(if its  a fragment) initialize myPresenter
    protected void onCreate(..){
    myPresenter=new MyPresenter(this);//this will enforce Activity/Fragment to implement IView
    }
    
    
    @Override //comes from MyPresenterIView
    public String getFieldOneText(){
    return ((EditText)findViewById(R.id.edttext_field_one)).getText().toString().trim();
    }
    }