Android 构建用户界面与Android的碎片

简介:

http://www.developer.com/ws/android/development-tools/building-uis-with-android-fragments.html


虽然片段简化了编码的动态用户界面,使用它们的有一个小的开销成本。虽然你的布局将最终确定的代码片段显示,仍然需要做出决定,以确定是否要更新现有的片段,或推出一个新的活动,该片段应不存在于当前活动内容。


例如,下面的代码使用的findFragmentById()方法,以确定是否一个片段是在一个特定的布局。如果没有定义,推出一个新的活动,以显示该片段。

@Override
public void onListItemSelected(int index) {
  SampleViewerFragment imageViewer = (SampleViewerFragment) getSupportFragmentManager()
      .findFragmentById(R.id.image_viewer_fragment);


  if (imageViewer == null || ! imageViewer.isInLayout()) {
    Intent showImage = new Intent(getApplicationContext(), SampleViewerActivity.class);
    showImage.putExtra("index", index);
    startActivity(showImage);
  } else {
    imageViewer.update(index);
  }
}

您还需要的只是像以前的许多活动课,虽然不是所有人都可以使用每个设备上。有什么理由不来设计你的应用程序的片段,即使您目前的UI设计或目标设备不要求他们在这个时候。在未来,支持多种设备时,大多数应用程序可能会找到好的用例的片段,虽然游戏使用他们自己的框架,通过OpenGL实现与所有的用户界面可能是一个合理的异常。


由于现在用户交互的情况通常发生在,片段本身,则需要进行编码的逻辑,以确定是否启动一个活动中的与片段本身,或从父活动。无论哪种方式,需要一些通信之间的片段和其活性。任何片段可以调用getActivity()方法来确定它存在于Activity类的。从那里,调用活动的UI方法可以使片段,以确定更多的屏幕和布局。或者,更简单,片段可以只调用一个方法,在一个活动中,但此检查需求。通过一个侦听器对象通过添加一个回调,我们已经走了这条路线。定制的片断类和监听器的接口中定义的方法来实现在Activity类的。下面是一个完整的实施的ListFragment类:


public class SampleListFragment extends ListFragment {
  private int index = 0;
  private ListItemSelectedListener selectedListener;


  @Override
  public void onListItemClick(ListView l, View v, int position, long id) {
    index = position;
    selectedListener.onListItemSelected(position);
  }


  @Override
  public void onActivityCreated(Bundle savedInstanceState) {
    super.onActivityCreated(savedInstanceState);
    setListAdapter(ArrayAdapter.createFromResource(getActivity(),
        R.array.image_titles, android.R.layout.simple_list_item_1));


    if (savedInstanceState != null) {
      index = savedInstanceState.getInt("index", 0);
      selectedListener.onListItemSelected(index);
    }
  }


  @Override
  public void onSaveInstanceState(Bundle outState) {
    super.onSaveInstanceState(outState);
    outState.putInt("index", index);
  }


  @Override
  public void onAttach(Activity activity) {
    super.onAttach(activity);
    try {
      selectedListener = (ListItemSelectedListener) activity;
    } catch (ClassCastException e) {
      throw new ClassCastException(activity.toString()
          + " must implement ListItemSelectedListener in Activity");
    }
  }


  public interface ListItemSelectedListener {
    public void onListItemSelected(int index);
  }
}

正如你可以看到,这个方法很简单。适配器被设置在onActivityCreated()方法。的片段连接到一个活动时,监听器分配和使用活动在的onAttach()方法通过实例验证。当用户点击ListView中的一个项目,监听器被触发调用onListItemSelected() ,我们已经实现了在活动类。状态保存和恢复。


这里一个有趣的方面是savedInstanceState onActivityCreated()方法的使用。从表面上看,这看起来只是保存该项目正在查看和恢复,。当方向发生变化,实例数据保存,这部分代码被触发。如果方向从两个片段视图切换到单一片段视图,活性保持不变,这是活性,将只显示列表。但是,一旦触发此代码的意图,最终推出的浏览器活动被触发。所以,当你从风景到人像(在本例中)旋转的观众活动。按返回键的用户返回到列表中。让我们谈论的观众活动。


我们启动查看器活动,当观看者的片段中没有定义的当前活动。本次活动还必须了解观众的片段,它可能需要的任何配置。正如你看到的上面的代码清单,这个信息被发送到其他活动,使用的意图额外的参数传递。然后,此信息传递到片段在用同样的方式。下面是完整的代码的浏览器活动,在自己的屏幕上显示的片段:

public class SampleViewerActivity extends FragmentActivity {
  public void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);


    if (getResources().getConfiguration().orientation == Configuration.ORIENTATION_LANDSCAPE)
    {
      finish();
      return;
    }


    setContentView(R.layout.image_viewer_activity);
    Intent launchingIntent = getIntent();
    int index = launchingIntent.getIntExtra("index", 0);
    SampleViewerFragment viewer = (SampleViewerFragment) getSupportFragmentManager()
        .findFragmentById(R.id.image_viewer_fragment);
    viewer.update(index);
  }
}

正如你所看到的,它只是一种方式来显示的观众片段。一个有趣的方面是,如果它的onCreate()方法被调用时,该设备已切换为横向模式,它完成后,将用户返回到上一个屏幕。只有当它被用于对景观的屏幕,这种方法效果很好。如果您选择使用它的在其他屏幕方向配置,这是必须更新以匹配。对于本示例,创建方向之间的平滑过渡。


观众片段是非常简单的。膨胀一个布局资源,并返回一个View对象作为onCreateView()方法被调用的结果。然后,它有一个执行的update()方法,你已经看到了几次。这是所有有给它。您可以查看在线代码库中的代码。


现在,当用户从纵向模式旋转为横向模式,屏幕切换屏幕(活动)模式下的双片段模式从单一的片段。您可以添加更多的替代布局,以更好地控制一下不同类型的屏幕上。例如,您可能只需要两个片段的布局时,大屏幕平板电脑。而不是把替代布局资源/布局土地目录,你可以把它的/布局的XLARGE土地目录。这是一个情况下,你需要更新的浏览器活动,完不成只是当屏幕方向改变。


在这里,我们看到的景观视野:


如果你改变方向的景观,你会看到相同的图像:





按返回按钮,返回到列表视图中:






结论
片段API,在Android 3.0推出,是一个伟大的API用于创建灵活,动态的用户界面。你已经学会了如何快速创建一个动态的用户界面,可以步行通过整个应用程序的外观和行为不同的屏幕方向和屏幕尺寸的片。因为这个功能是通过一个兼容库,任何应用程序为目标的A​​ndr​​oid 1.6及以后可以从这些改进中获益,以灵活的用户界面。这是一个简要的介绍片段API,其中有许多更有趣的功能,如过渡,后退堆栈,对话片段,以及更多。当目标的Andr​​oid 3.0及更高版本,有更多的功能的兼容性库中没有找到。

相关文章
|
16天前
|
移动开发 Java Android开发
构建高效Android应用:探究Kotlin与Java的性能差异
【4月更文挑战第3天】在移动开发领域,性能优化一直是开发者关注的焦点。随着Kotlin的兴起,其在Android开发中的地位逐渐上升,但关于其与Java在性能方面的对比,尚无明确共识。本文通过深入分析并结合实际测试数据,探讨了Kotlin与Java在Android平台上的性能表现,揭示了在不同场景下两者的差异及其对应用性能的潜在影响,为开发者在选择编程语言时提供参考依据。
|
1天前
|
缓存 移动开发 Android开发
构建高效Android应用:从优化用户体验到提升性能表现
【4月更文挑战第18天】 在移动开发的世界中,打造一个既快速又流畅的Android应用并非易事。本文深入探讨了如何通过一系列创新的技术策略来提升应用性能和用户体验。我们将从用户界面(UI)设计的简约性原则出发,探索响应式布局和Material Design的实践,再深入剖析后台任务处理、内存管理和电池寿命优化的技巧。此外,文中还将讨论最新的Android Jetpack组件如何帮助开发者更高效地构建高质量的应用。此内容不仅适合经验丰富的开发者深化理解,也适合初学者构建起对Android高效开发的基础认识。
2 0
|
1天前
|
移动开发 Android开发 开发者
构建高效Android应用:采用Kotlin进行内存优化的策略
【4月更文挑战第18天】 在移动开发领域,性能优化一直是开发者关注的焦点。特别是对于Android应用而言,由于设备和版本的多样性,确保应用流畅运行且占用资源少是一大挑战。本文将探讨使用Kotlin语言开发Android应用时,如何通过内存优化来提升应用性能。我们将从减少不必要的对象创建、合理使用数据结构、避免内存泄漏等方面入手,提供实用的代码示例和最佳实践,帮助开发者构建更加高效的Android应用。
4 0
|
3天前
|
缓存 移动开发 Java
构建高效的Android应用:内存优化策略
【4月更文挑战第16天】 在移动开发领域,尤其是针对资源有限的Android设备,内存优化是提升应用性能和用户体验的关键因素。本文将深入探讨Android应用的内存管理机制,分析常见的内存泄漏问题,并提出一系列实用的内存优化技巧。通过这些策略的实施,开发者可以显著减少应用的内存占用,避免不必要的后台服务,以及提高垃圾回收效率,从而延长设备的电池寿命并确保应用的流畅运行。
|
11天前
|
监控 API Android开发
构建高效安卓应用:探究Android 12中的新特性与性能优化
【4月更文挑战第8天】 在本文中,我们将深入探讨Android 12版本引入的几项关键技术及其对安卓应用性能提升的影响。不同于通常的功能介绍,我们专注于实际应用场景下的性能调优实践,以及开发者如何利用这些新特性来提高应用的响应速度和用户体验。文章将通过分析内存管理、应用启动时间、以及新的API等方面,为读者提供具体的技术实现路径和代码示例。
|
12天前
|
移动开发 API Android开发
构建高效Android应用:探究Kotlin协程的优势与实践
【4月更文挑战第7天】 在移动开发领域,性能优化和应用响应性的提升一直是开发者追求的目标。近年来,Kotlin语言因其简洁性和功能性在Android社区中受到青睐,特别是其对协程(Coroutines)的支持,为编写异步代码和处理并发任务提供了一种更加优雅的解决方案。本文将探讨Kotlin协程在Android开发中的应用,揭示其在提高应用性能和简化代码结构方面的潜在优势,并展示如何在实际项目中实现和优化协程。
|
12天前
|
XML 开发工具 Android开发
构建高效的安卓应用:使用Jetpack Compose优化UI开发
【4月更文挑战第7天】 随着Android开发不断进化,开发者面临着提高应用性能与简化UI构建流程的双重挑战。本文将探讨如何使用Jetpack Compose这一现代UI工具包来优化安卓应用的开发流程,并提升用户界面的流畅性与一致性。通过介绍Jetpack Compose的核心概念、与传统方法的区别以及实际集成步骤,我们旨在提供一种高效且可靠的解决方案,以帮助开发者构建响应迅速且用户体验优良的安卓应用。
|
XML Android开发 数据格式
Android官方开发文档Training系列课程中文版:构建第一款安卓应用之创建用户界面
原文地址:http://android.xsoftlab.net/training/basics/firstapp/building-ui.html 在这节课中,你会创建一个xml的布局文件,它包含一个Text成员和一个Button成员。
909 0
|
21天前
|
Java Android开发
Android 开发获取通知栏权限时会出现两个应用图标
Android 开发获取通知栏权限时会出现两个应用图标
12 0
|
1月前
|
XML 缓存 Android开发
Android开发,使用kotlin学习多媒体功能(详细)
Android开发,使用kotlin学习多媒体功能(详细)
96 0