gpt4 book ai didi

java - 如何减少 MainActivity/外包 UI 代码的大小

转载 作者:行者123 更新时间:2023-12-01 11:51:36 26 4
gpt4 key购买 nike

我的大多数应用程序都是只有一个屏幕的应用程序(由于功能原因),有时会通过“ float ”弹出窗口进行扩展,这些弹出窗口基本上是添加到主布局的相对布局(包含其他 UI 元素),保留 UI 元素主布局在后台处于 Activity 状态并且“可触摸”。

为了更好地理解,请看草图(纯粹象征性的): enter image description here

如果您还包括弹出窗口中的所有内容,我有大约 90 个 UI 元素,十几个自定义 View 类,例如按钮、 slider ……一次,所有这些都需要运行某些监听器它们都必须在启动时调整大小 [...]

事实上,我编写的代码相当高效(就使用的字节数而言),如果有一个 3 行方法返回一个值来替换 4 行附加代码,我编写这个方法只是为了满足我。但是,我完全不明白如何将 MainActivity 的代码外包给其他类。当然,如果需要进行计算,我会将其放入另一个类中,而不仅仅是在 MainActivity 类中创建一个方法。不管怎样,我的 MainActivity 现在有 1600 行代码,对于调试、添加或更改代码来说,这是一个巨大的文本量。仅 UI 元素的变量声明就需要 100 行代码(如果压缩的话可能需要 70 行)

这是我对帖子做过的最长的解释,但现在我们来回答我的问题:

如何将监听器等代码、findViewById() 等 UI 内容或类似内容外包给其他类?是否有有效的常见做法?我不想采用会导致 CPU 性能飙升的笨拙解决方法,因此“平滑”的东西就是我正在寻找的东西。

这可能有点偏离主题,但我希望在这里提问是可以的。

最佳答案

我不确定您的问题是否有特定的答案,因为我认为这完全取决于您可以阅读其他项目的源代码等经验。但我有一些建议可以帮助你:

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

您的 Activity 的 onCreate 方法可能如下所示:

@Override protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
ButterKnife.inject(this);

new SomePresenter(someView);
}

关于java - 如何减少 MainActivity/外包 UI 代码的大小,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/28777720/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com