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及更高版本,有更多的功能的兼容性库中没有找到。

相关文章
|
11月前
|
安全 Android开发 iOS开发
Android vs. iOS:构建生态差异与技术较量的深度剖析###
本文深入探讨了Android与iOS两大移动操作系统在构建生态系统上的差异,揭示了它们各自的技术优势及面临的挑战。通过对比分析两者的开放性、用户体验、安全性及市场策略,本文旨在揭示这些差异如何塑造了当今智能手机市场的竞争格局,为开发者和用户提供决策参考。 ###
|
9月前
|
搜索推荐 前端开发 API
探索安卓开发中的自定义视图:打造个性化用户界面
在安卓应用开发的广阔天地中,自定义视图是一块神奇的画布,让开发者能够突破标准控件的限制,绘制出独一无二的用户界面。本文将带你走进自定义视图的世界,从基础概念到实战技巧,逐步揭示如何在安卓平台上创建和运用自定义视图来提升用户体验。无论你是初学者还是有一定经验的开发者,这篇文章都将为你打开新的视野,让你的应用在众多同质化产品中脱颖而出。
149 19
|
10月前
|
搜索推荐 前端开发 Android开发
安卓开发中的自定义视图——打造个性化用户界面
在安卓应用开发的广阔天地里,自定义视图是实现个性化界面设计的重要手段。通过深入理解安卓绘图基础、触摸事件处理和布局机制,开发者可以突破标准控件的限制,创造出独一无二的用户体验。本文将引导你探索自定义视图的核心概念,提供实用的代码示例,并分享如何有效地解决开发过程中可能遇到的挑战。无论你是初学者还是有经验的开发者,这篇文章都将为你打开一扇通往创新和个性化的大门。
|
11月前
|
Java API Android开发
安卓应用程序开发的新手指南:从零开始构建你的第一个应用
【10月更文挑战第20天】在这个数字技术不断进步的时代,掌握移动应用开发技能无疑打开了一扇通往创新世界的大门。对于初学者来说,了解并学习如何从无到有构建一个安卓应用是至关重要的第一步。本文将为你提供一份详尽的入门指南,帮助你理解安卓开发的基础知识,并通过实际示例引导你完成第一个简单的应用项目。无论你是编程新手还是希望扩展你的技能集,这份指南都将是你宝贵的资源。
457 5
|
11月前
|
前端开发 JavaScript 测试技术
Android适合构建中大型项目的架构模式全面对比
Android适合构建中大型项目的架构模式全面对比
160 2
|
11月前
|
开发工具 Android开发 iOS开发
Android vs iOS:构建移动应用时的关键考量####
本文深入探讨了Android与iOS两大移动平台在开发环境、性能优化、用户体验设计及市场策略方面的差异性,旨在为开发者提供决策依据。通过对比分析,揭示两个平台各自的优势与挑战,帮助开发者根据项目需求做出更明智的选择。 ####
|
9月前
|
Java Android开发 开发者
探索安卓开发:构建你的第一个“Hello World”应用
在安卓开发的浩瀚海洋中,每个新手都渴望扬帆起航。本文将作为你的指南针,引领你通过创建一个简单的“Hello World”应用,迈出安卓开发的第一步。我们将一起搭建开发环境、了解基本概念,并编写第一行代码。就像印度圣雄甘地所说:“你必须成为你希望在世界上看到的改变。”让我们一起开始这段旅程,成为我们想要见到的开发者吧!
175 0
|
11月前
|
调度 Android开发 开发者
构建高效Android应用:探究Kotlin多线程优化策略
【10月更文挑战第11天】本文探讨了如何在Kotlin中实现高效的多线程方案,特别是在Android应用开发中。通过介绍Kotlin协程的基础知识、异步数据加载的实际案例,以及合理使用不同调度器的方法,帮助开发者提升应用性能和用户体验。
173 4
|
10月前
|
安全 搜索推荐 程序员
深入探索Android系统的碎片化问题及其解决方案
在移动操作系统的世界中,Android以其开放性和灵活性赢得了广泛的市场份额。然而,这种开放性也带来了一个众所周知的问题——系统碎片化。本文旨在探讨Android系统碎片化的现状、成因以及可能的解决方案,为开发者和用户提供一种全新的视角来理解这一现象。通过分析不同版本的Android系统分布、硬件多样性以及更新机制的影响,我们提出了一系列针对性的策略,旨在减少碎片化带来的影响,提升用户体验。
|
10月前
|
搜索推荐 Android开发 UED
安卓开发中的自定义视图:打造个性化用户界面
【10月更文挑战第22天】在安卓应用的海洋中,如何让你的应用脱颖而出?一个独特且直观的用户界面(UI)至关重要。本文将引导你通过自定义视图来打造个性化的用户体验,从基础的视图绘制到触摸事件的处理,我们将一步步深入探讨。准备好了吗?让我们开始吧!

热门文章

最新文章