创建 generic/base 形式 class 无论是 activity 还是片段

Create generic/base form class regardless if activity or fragment

我正在尝试创建一个 generic/base 表单,无论它是 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。如何在不编写 BaseFormFragment 的情况下使它也可用于 fragments?我不想重复从 activityfragment 的默认行为,反之亦然。

将其视为示例 Presenter class,它处理您的按钮点击并获取所有表单字段并发送到服务器

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();
}

并在您的 Activity 或 Fragment

中使用 Presenter
//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();
}
}