我的大多数应用程序都是仅有一个屏幕的应用程序(由于功能),有时会通过“浮动”弹出窗口进行扩展,这些弹出窗口基本上是相对于主布局添加的RelativeLayouts(包含其他UI元素),保留UI元素主要布局的活动和背景中的“可触摸”。
为了更好地理解,请看草图(纯粹的象征性):
如果你也包括弹出窗口中的所有内容,我有大约90个UI元素,一次打开一些自定义View类,比如按钮,滑块......,所有这些都需要运行某些监听器他们,所有这些都必须在启动时重新调整大小[...]
事实上,我写的效率很高(就所使用的字节数而言)代码,如果有一个3行方法返回一个替换4行附加代码的值,我写这个方法只是为了满足我。但是,我完全不明白如何将代码从我的MainActivity外包给其他类。当然,如果要进行计算,这是我放入另一个类而不是仅仅在MainActivity类中创建方法的东西。无论如何,我的MainActivity现在处于 1600行代码,这是用于调试,添加或更改代码的大量文本。我的UI元素的变量声明单独占用100行代码(如果压缩则可能是70行)这是我为帖子做过的最长的解释,但现在我们回答了我的问题:
你如何/可以将像侦听器这样的代码,像findViewById()这样的UI东西或类似的东西外包给其他类?是否有通用的做法以有效的方式这样做?我不想采用笨拙的解决方案来飙升CPU,所以“平滑”的东西是我正在寻找的东西。
这可能是偏离主题的,但我希望可以在这里被问到。
答案 0 :(得分:1)
我不确定你的问题是否有特别的答案,因为我认为这是关于经验的,你可以阅读其他项目的源代码。但我没有什么建议可以帮到你:
1。使用可消除样板代码(如findViewById
和侦听器)的库。其中一个是Butterknife
7行代码:
View text = findViewById(R.id.text_id);
text.setOnClickListener(
new View.OnClickListener() {
@Override public void onClick(View v) {
//
}
}
);
2行代码:
@OnClick(R.id.text_id) public void handleClickOnText() {
//
}
2. 使用静态辅助类:
4行代码:
AlertDialog.Builder builder = new AlertDialog.Builder(this);
builder.setMessage(R.string.new_message);
builder.setTitle(R.string.create_calendar_title);
builder.show();
1行代码:
DialogsHelper.newMessage(this);
3。了解MVP
。这是关于模块化应用程序架构。粗略地说,它有助于将原始View
与逻辑分开。
基本样本:
public static class SomePresenter {
private SomeView view;
public SomePresenter(SomeView view) {
this.view = view;
view.showProgressLoading();
loadData();
}
private void loadData(){
//loading data from some server
}
private void loadingDataHandler(SomeModel model){
view.showData(model);
}
}
public static class SomeView extends View{
@Inject(R.id.text_progress_title) TextView text;
public SomeView(Context context) {
super(context);
ButterKnife.inject(this);
}
public void showData(SomeModel model){
text.setText(model.dataA + ":" + model.dataB);
}
public void showProgressLoading(){
text.setText(R.string.progress);
}
}
public static class SomeModel{
public final int dataA;
public final int dataB;
}
您的onCreate
活动方法可能如下所示:
@Override protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
ButterKnife.inject(this);
new SomePresenter(someView);
}