- 使用全局变量
如果您不想用简单的
Intent.putExtra()调用弄乱代码并为每个唯一的代码管理这些事情,则
Activity必须在应用程序中使用全局变量。
Application只要应用程序处于活动状态,就可以扩展和存储所需的数据。要真正实现它,请使用此出色的答案。这将使活动之间的依赖关系消失。例如,假设您在应用程序的生命周期内需要为该应用程序提供一个“用户名”-这是一个很好的工具。无需打脏
Intent.putExtra()电话。
- 使用样式
制作第一个Android应用程序时,一个常见的错误是通常只是开始编写XML视图。XML文件将(没有问题且非常快速)最多包含多行代码。在这里,您可以找到一个解决方案,只需使用该
style属性即可实现特定的行为。例如,考虑这段代码:
values / styles.xml :
<style name="TitleText"> <item name="android:layout_height">wrap_content</item> <item name="android:layout_width">wrap_content</item> <item name="android:textSize">18sp</item> <item name="android:textColor">#000</item> <item name="android:textStyle">bold</item> </style>
layout / main.xml :
现在,假设您有两个,
TextView并且两个都应具有相同的行为,则使它们使用
TitleText样式。样例代码:
<!--- ... --><TextView android:id="@+id/textview_one" /><TextView android:id="@+id/textview_two" /><!--- ... -->
很简单,您不需要重复代码。如果您真的想进一步研究这个特定主题,请参阅布局技巧:创建可重用的UI组件。
- 使用字符串
这一点很简短,但我认为必须提及。开发人员可能会犯的另一个错误是跳过 strings.xml
,只在代码中(他需要的地方)编写UI消息(和属性名称)。使您的应用程序易于维护;只需在 strings.xml 文件中定义消息和属性。
- 创建和使用全局工具类
当我编写第一个应用程序时,我只是在需要的地方编写(并重复了)方法。结果?许多在各种活动之间具有相同行为的方法。我学到的是制作工具类。例如,假设您必须在所有活动中发出Web请求。在这种情况下,请跳过在实际中定义它们的步骤,
Activity并为其创建一个静态方法。样例代码:
public final class Tools { private Tools() { } public static final void sendData(String url, String user, String pass) { // URLConnections, HttpClients, etc... }}
现在,您只需在
Activity需要向服务器发送数据的代码中使用以下代码即可:
Tools.sendData("www.www.www", "user", "pass");
但是,您明白了。 在需要的地方 使用此“模式” ,它可以防止您弄乱代码。
- 让自定义类定义用户需要与应用程序进行交互的行为
这可能是最有用的一点。要仅定义“ 用户需要与应用程序进行交互的位置
”,假设您有一个
Menu,它的行为在行数方面非常长,为什么我们将
Menu的计算保留在同一类中?每一个小项都会使您的
Activity课程变得更痛苦,因为您的代码看起来像“意大利面条”。例如,不要像这样:
@Overridepublic boolean onPrepareOptionsMenu(Menu menu) { MenuItem item; item = menu.findItem(R.id.menu_id_one); if (aBooleanVariable) { item.setEnabled(true); } else { item.setEnabled(false); } // More pre... return super.onPrepareOptionsMenu(menu);}@Overridepublic boolean onOptionsItemSelected(MenuItem i) { // Code, calculations... // ... // ... return super.onOptionsItemSelected(i);}
重新设计为这样的东西:
private MyCustomMenuInstance mMenuInstance;@Overridepublic void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.main); mMenuInstance = new MyCustomMenuInstance();}@Overridepublic boolean onPrepareOptionsMenu(Menu menu) { mMenuInstance.onPrepareOptionsMenu(menu); return super.onPrepareOptionsMenu(menu);}@Overridepublic boolean onOptionsItemSelected(MenuItem i) { mMenuInstance.onOptionsItemSelected(i); return super.onOptionsItemSelected(i);}
例如
MyCustomMenuInstance:
public class MyCustomMenuInstance { // Member fields.. public MyCustomMenuInstance() { // Init stuff. } public void onPrepareOptionsMenu(Menu menu) { // Do things.. // Maybe you want to modify a variable in the Activity // class? Well, pass an instance as an argument and create // a method for it in your Activity class. } public void onOptionsItemSelected(MenuItem i) { // Do things.. // Maybe you want to modify a variable in the Activity // class? Well, pass an instance as an argument and create // a method for it in your Activity class. }}
您会看到前进的方向。您可以将此很多事情,例如
onClick,
onClickListener,
onCreateOptionsMenu,名单很长。要了解更多“最佳做法”,您可以在此处查看来自Google的一些示例应用程序。寻找他们如何以一种不错且正确的方式实现事物。
遗言; 保持代码干净,以逻辑方式(尤其是正确方式)命名变量和方法。始终要始终了解您在代码中的位置-这非常重要。
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)