代码拉取完成,页面将自动刷新
android {
defaultConfig {
//启用分包
multiDexEnabled = true
}
//Google ViewBinding
buildFeatures {
viewBinding true
}
}
dependencies {
//yb-mvp框架包
api 'com.gitee.miwisay:yb-mvp:v2.2'
}
public class MainActivity extends MvpAppCompatActivity<XXXMainBinding> implements MainView {
@Presenter
private MainPresenter mPresenter;
@Override
protected void onCreate( @Nullable Bundle savedInstanceState ) {
super.onCreate( savedInstanceState );
//如果需要Handler,可以这样使用 ↓↓↓
testHandler();
}
/**
* 编译完成后,XXXMainBinding会自动生成
* XXXMainBinding会根据layout布局名称命名。
* eg:act_test_mvp_main -> ActTestMvpMainBinding
*/
@Override
public XXXMainBinding onBindingView(@NonNull LayoutInflater inflater, @Nullable ViewGroup container) {
return XXXMainBinding.inflate( inflater );
}
/**
初始化View的默认数据
@param binding {@link androidx.viewbinding.ViewBinding}
*/
@Override
public void initView(@NonNull XXXMainBinding binding) {
super.initView( binding );
/* 可以定义一些基本设置 */
//XXX为layout布局中定义的控件id。eg:act_test_main_tv_text -> actTestMainTvText
//binding.actTestMainTvText.setTextSize( 26 );
//binding.actTestMainTvText.setGravity( Gravity.CENTER );
binding.XXX.setTextSize( 26 );
binding.XXX.setGravity( Gravity.CENTER );
}
/**
MainView 定义的接口
@param s 回调结果
*/
@Override
public void onText( String s ) {
//XXX为layout布局中定义的控件id。eg:act_test_main_tv_text -> actTestMainTvText
//getViewBinding().actTestMainTvText.setText( s );
getViewBinding().XXX.setText( s );
Log.d( "TAG", s );
}
/**
* Handler
*/
private void testHandler() {
Message msg = obtainMessage();
msg.what = 100;
msg.obj = getClass().getSimpleName();
sendMessage( msg );
post( () -> Log.d( "TAG", "handler post.(main looper)") );
postAsync( () -> Log.d( "TAG", "handler postAsync.(thread)") );
postAsync(() -> {
//子线程
Thread.sleep( 6000L );
Log.d( "TAG", "handler postAsync.call.(thread 1)");
return "Test String 1";
}, s -> {
//主线程
Log.d( "TAG", "handler postAsync.accept.(main looper 1), s:" + s );
});
postAsync(consumer -> {
//子线程
new Thread(() -> {
try {
Thread.sleep( 6000L );
} catch (InterruptedException e) {
e.printStackTrace();
}
consumer.accept( "Test String 2" );
Log.d( "TAG", "handler postAsync.call.(thread 2)");
}).start();
}, (Consumer<String>) s -> {
//主线程
Log.d( "TAG", "handler postAsync.accept.(main looper 2), s:" + s );
});
}
@Override
public boolean handleMessage(@NonNull Message msg) {
Log.d( "TAG", String.format( "handleMessage -> Activity -> what:%s, obj:%s", msg.what, msg.obj ) );
//如果不需要Fragment接收handlerMessage, 就注释掉super.handleMessage(msg);
return super.handleMessage(msg);
}
}
/**
MainActivity 的 MvpViewable
*/
public interface MainView extends MvpViewable {
void onText(String s);
}
public class MainPresenter extends MvpPresenter<MainView> {
@Model(ModelType.SHARED)
private Model1 mModel1; //共享Model
@Model
private Model1 mModel1_1; //共享Model
@Model
private Model2 mModel2; //共享Model
@Model(ModelType.NEW_MODEL)
private Model2 mModel2_2; //重新实例的Model
public MainPresenter( @NonNull MainView view ) {
super( view );
//mModel1 和 mModel1_1 为共享Model,当 mModel1 内部发生改变时, mModel1_1 也会跟着改变
//mModel2_2 重新实例的Model,可以理解为 new了一个 Model2,与 mModel2 互不干预
//在实际开发中,mModel1 和 mModel1_1 可以在不同的类中实现共享。
//例如:MainPresenter、OtherPresenter 两个 Presenter 都持有 Model1
/* 回调结果。Handler.post提交 */
viewCall(v -> {
//回调处理结果
v.onText( mModel1.getText() );
});
mModel2.queryText(s -> {
viewCall( v -> {
//回调处理结果
v.onText( s );
});
})
/* 回调结果。同步提交 */
MainView v = getView();
if( v != null ) v.onText( mModel1.getText() );
mModel2.queryText(s -> {
MainView v = getView();
if( v != null ) v.onText( s );
})
}
/**
Activity 或 Fragment 的生命周期
@param status 生命周期
{@link LifeStatus#CREATE}、{@link LifeStatus#PAUSE}...
@param b 传入的参数
*/
@Override
public void onLifeStatus( @LifeStatus int status, @Nullable Bundle b ) {
super.onLifeStatus( status, b );
}
/**
Activity 或 Fragment 创建时
*/
@Override
public void onLifeCreate( @Nullable Bundle savedInstanceState ) {
super.onLifeCreate( savedInstanceState );
}
@Override
public void onLife...() {}
}
public class Model1 extends MvpModel {
/**
Model创建时会调用
*/
@Override
public void onCreateModel() {
super.onCreateModel();
}
/**
Model销毁时会调用
*/
@Override
public void onDestroyModel() {
super.onDestroyModel();
}
public String getText() {
return "Model1 -> Hello World!";
}
}
public class Model2 extends MvpModel {
/**
Model创建时会调用
*/
@Override
public void onCreateModel() {
super.onCreateModel();
}
/**
Model销毁时会调用
*/
@Override
public void onDestroyModel() {
super.onDestroyModel();
}
public void queryText(Consumer<String> call) {
if( call != null ) call.accept( "Model2 -> Hello World!" );
}
}
此处可能存在不合适展示的内容,页面不予展示。您可通过相关编辑功能自查并修改。
如您确认内容无涉及 不当用语 / 纯广告导流 / 暴力 / 低俗色情 / 侵权 / 盗版 / 虚假 / 无价值内容或违法国家有关法律法规的内容,可点击提交进行申诉,我们将尽快为您处理。