在Android模块间实现视图绑定有多种解决方法,下面是其中两种常用的方法及对应的代码示例:
示例代码:
在源模块(MainActivity.java)中定义接口:
public interface OnDataChangeListener {
void onDataChanged(String data);
}
在目标模块(FragmentA.java)中实现接口,并处理接收到的数据:
public class FragmentA extends Fragment implements MainActivity.OnDataChangeListener {
// ...
@Override
public void onDataChanged(String data) {
// 处理接收到的数据
textView.setText(data);
}
}
在源模块(MainActivity.java)中创建目标模块的实例,并将其传递给相关视图或组件:
public class MainActivity extends AppCompatActivity {
// ...
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
FragmentA fragmentA = new FragmentA();
fragmentA.setOnDataChangeListener(this);
// ...
}
// ...
}
示例代码:
在源模块(MainActivity.java)中发送事件:
public class MainActivity extends AppCompatActivity {
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
// 发送事件
EventBus.getDefault().post(new DataChangeEvent("Hello, EventBus!"));
// ...
}
// ...
}
在目标模块(FragmentA.java)中接收事件并处理:
public class FragmentA extends Fragment {
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
// 注册EventBus
EventBus.getDefault().register(this);
}
@Subscribe(threadMode = ThreadMode.MAIN)
public void onDataChanged(DataChangeEvent event) {
// 处理接收到的事件
textView.setText(event.getData());
}
@Override
public void onDestroy() {
super.onDestroy();
// 解注册EventBus
EventBus.getDefault().unregister(this);
}
}
上述示例代码使用了EventBus作为事件总线框架,需要在模块的build.gradle中添加EventBus的依赖。另外,还需要在清单文件中注册EventBus的索引(如果使用注册表模式)。