`
tmj_159
  • 浏览: 706552 次
  • 性别: Icon_minigender_1
  • 来自: 永州
社区版块
存档分类
最新评论

上官网学android之六(Building a Dynamic UI with Fragments)

 
阅读更多

官网地址:

http://developer.android.com/training/basics/fragments/index.html

 

一、创建一个Fragment

 你可以认为一个Fragment是一个Activity的模块化区域。它有它自己生命周期,接收它自己的输入事件,你可以在Activity运行的时候动态添加和移除它。

 

1.1 创建一个Fragment类

    和Activity一样,需要继承各自特有的父类(Fragment),然后重载它的生命周期函数,在函数中插入程序逻辑。

    我没有看到有像创建一个Activity一样可以直接通过IDE直接创建的(new ->others -> android -> android activity),看来我们要从创建一个class开始了。new -> class 我们熟悉的节奏,这里我只添加了一个方法。里面都是自动生成的,我还没有写任何代码。

import android.os.Bundle;
import android.support.v4.app.Fragment;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;

public class ArticleFragment extends Fragment {

	@Override
	public View onCreateView(LayoutInflater inflater, ViewGroup container,
			Bundle savedInstanceState) {
		return super.onCreateView(inflater, container, savedInstanceState);
	}
	

}

 

1.2 用XML把Fragment添加到一个Activity中

首先我们新建一个layout文件,new -> other -> Android -> Android XML Layout File (new_articles.xml)

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:id="@+id/headlines_fragment"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:layout_weight="1"
    android:baselineAligned="false" >

    <fragment
        android:id="@+id/article_fragment"
        android:name="com.example.p6.ArticleFragment"
        android:layout_width="match_parent"
        android:layout_height="match_parent"
        android:layout_weight="2" />

</LinearLayout>

 因为Fragment是嵌入到Activity中的,所以我们需要一个特殊的Activity。

public class MainActivity extends FragmentActivity {

	@Override
	protected void onCreate(Bundle savedInstanceState) {
		super.onCreate(savedInstanceState);
		setContentView(R.layout.new_articles);
	}

}

 注意到和其它的不一样的是,我们已经把Layout修改为news_articles。同时,通过XML的形式将Fragment添加到Layout中的形式,不能在运行时灵活的移除它。

 

二、构造一个灵活的UI

当你为不同屏幕大小的android设备设计应用时,你可以重用你的Fragment在适应不同的设备。

官网上给出如下的图片来说明



 

2.1 运行时添加一个Fragment到一个Activity中

首先我们把我们之前添加到layout中的Fragment清空,并且LinerLayout 修改为FrameLayout        res/layout/news_articles.xml

<FrameLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:id="@+id/fragment_container"
    android:layout_width="match_parent"
    android:layout_height="match_parent" />

 这样 这个 Layout中没有任何东西了。接下来我们在代码中添加,修改MainActivity 中的onCreate()方法

public class MainActivity extends FragmentActivity {

	@Override
	protected void onCreate(Bundle savedInstanceState) {
		super.onCreate(savedInstanceState);
		setContentView(R.layout.news_articles);

		if (findViewById(R.id.fragment_container) != null) {
			if (savedInstanceState != null) {
				return;
			}

			ArticleFragment af = new ArticleFragment();

			af.setArguments(getIntent().getExtras());

			getSupportFragmentManager().beginTransaction()
					.add(R.id.fragment_container, af).commit();
		}
	}

}

2.2 切换Fragment

我们需要另外一个Fragment来完成切换,ArticleFragment2

public class ArticleFragment2 extends Fragment{

	@Override
	public View onCreateView(LayoutInflater inflater, ViewGroup container,
			Bundle savedInstanceState) {
		return super.onCreateView(inflater, container, savedInstanceState);
	}
}

 切换的时候和以前很像

ArticleFragment2 af2=new ArticleFragment2();
FragmentTransaction transaction = getSupportFragmentManager().beginTransaction();
transaction.replace(R.id.fragment_container, af2);
transaction.addToBackStack(null);
		
transaction.commit();

 三、 和其它Fragment进行交互

 关于这一块官网上说的感觉有点乱,代码零零散散的。其实总结起来很简单。

核心方法在于如何在Activity中找到fragment和各种View,如何在Fragment中得到Activity

getActivity();//获得Activity
getActivity().findViewById(R.id.receive_text);//获得View
getFragmentManager().findFragmentById(R.id.ReceiveFragment);//获得Fragment

 我这里自己写了一个例子,在一个Activity中包含两个Fragments,输入完之后点击第一个fragment中的按钮,第二个Fragment现实消息。

首先是layout

activity_man.xml

<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:id="@+id/headlines_fragment"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:layout_weight="1"
    android:baselineAligned="false"
    android:orientation="vertical" >

    <fragment
        android:id="@+id/SendFragment"
        android:name="com.tang.test.SendFragment"
        android:layout_width="match_parent"
        android:layout_height="200dp" />

    <fragment
        android:id="@+id/ReceiveFragment"
        android:name="com.tang.test.ReceiveFragment"
        android:layout_width="match_parent"
        android:layout_height="match_parent" />

</LinearLayout>

 send.xml

<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:id="@+id/headlines_fragment"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:layout_weight="1"
    android:background="#FFC000"
    android:baselineAligned="false"
    android:orientation="vertical" >

    <EditText
        android:id="@+id/sendInput"
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:ems="10"
        android:inputType="text" >
    </EditText>

    <Button
        android:id="@+id/sendButtion"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:text="@string/send" />

</LinearLayout>

 receive.xml

<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:id="@+id/headlines_fragment"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:layout_weight="1"
    android:background="#FFCC00"
    android:baselineAligned="false" >

    <TextView
        android:id="@+id/receive_text"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:text="@string/receive" />

</LinearLayout>

 然后是类

MainActivity

public class MainActivity extends FragmentActivity  {

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

}

 SendFragment

public class SendFragment extends Fragment {

	public static final String ARG_POSITION = "ARG_POSITION";

	@Override
	public View onCreateView(LayoutInflater inflater, ViewGroup container,
			Bundle savedInstanceState) {
		return inflater.inflate(R.layout.send, container, false);
	}

	@Override
	public void onStart() {
		super.onStart();
		Button button = (Button) getActivity().findViewById(R.id.sendButtion);
		button.setOnClickListener(new View.OnClickListener() {
			@Override
			public void onClick(View v) {
				EditText inputText = (EditText) getActivity().findViewById(
						R.id.sendInput);
				ReceiveFragment receiveFragment = (ReceiveFragment) getFragmentManager()
						.findFragmentById(R.id.ReceiveFragment);
				receiveFragment.showText(inputText.getText().toString());
			}
		});
	}

}

 ReceiveFragment

public class ReceiveFragment extends Fragment {

	@Override
	public View onCreateView(LayoutInflater inflater, ViewGroup container,
			Bundle savedInstanceState) {
		return inflater.inflate(R.layout.receive, container, false);
	}
	
	public void showText(String text){
		TextView textView = (TextView)getActivity().findViewById(R.id.receive_text);
		textView.setText(text);
	}
}

 代码这么详细,跑起来应该很简单了。哎,写这篇文章加上跑例子,要了大概5个小时。泪奔呀

 

 

 

  • 大小: 35.3 KB
分享到:
评论

相关推荐

    入门篇通过片段创建灵活的用户界面-Building a Dynamic UI with Fragments

    在Android开发中,Fragment是一种可以被嵌入到Activity中的模块化组件,它有自己的生命周期,并且可以接收自己的输入事件。在运行时,开发者可以添加或移除Fragment,就像使用子Activity一样,可以在不同的Activity...

    Creating Dynamic UI with Android Fragments - Second Edition 2016 {PRG}.pdf

    《使用Android Fragments创建动态UI》第二版是一本专注于Android平台的开发书籍,详细介绍了如何利用Android的Fragment组件构建出适应不同设备特性的动态用户界面。书籍内容不仅涵盖了Fragment的基本概念和使用方法...

    Creating.Dynamic.UI.with.Android.Fragments.2nd.Edition.1785889

    Create engaging apps with fragments to provide a rich user interface that dynamically adapts to the individual characteristics of your customers' tablets and smartphones About This Book From an ...

    基于Android框架的动态UI构建(Creating Dynamic UI with Android Fragments, 2nd Edition)

    基于Android框架的动态UI构建(Creating Dynamic UI with Android Fragments, 2nd Edition)-2016英文原版,0积分——该书是2016年最新的第2版,全书154页。

    Creating Dynamic UI with Android Fragments

    Long gone are the days of the mobile apps with a static UI squished onto a tiny screen. Today's users expect mobile apps to be dynamic and highly interactive. They expect an app to look fantastic when...

    Creating Dynamic UIs With Android Fragments ,2nd Edition

    Long gone are the days of mobile apps with a static UI squished on a tiny screen. Today's users expect mobile apps to be dynamic and highly interactive. They expect an app to look fantastic when they ...

    [Android] 动态 UI 开发教程 Android Fragments 实现 英文版

    [Packt Publishing] Creating Dynamic UI with Android Fragments E Book ☆ 图书概要:☆ Leverage the power of Android fragments to develop dynamic user interfaces for your apps Overview Learn ...

    fragments游戏框架

    - [Building a Dynamic UI with Fragments](https://developer.android.com/training/basics/fragments/creating.html) - [Fragments](https://developer.android.com/guide/components/fragments.html) 2. **...

    Android Fragments

    通过以上六个章节的学习,读者不仅能够深入了解Fragments的核心概念和技术细节,还能掌握如何利用Fragments构建高质量的Android应用。无论是初学者还是经验丰富的开发者,都能够从中获得有价值的指导和启发。

    Android UI 基础教程

    9. **碎片(Fragments)**:碎片是Android 3.0引入的概念,允许在单个屏幕上展示多个UI部分。理解碎片的生命周期和与Activity的关系,对于开发适应不同屏幕尺寸的应用尤其重要。 10. **动画(Animations)**:...

    Android_UI.rar_Android_UI_android_ui

    在Android应用开发中,UI(用户界面)设计是至关重要的,因为它直接影响到用户的体验和应用的吸引力。Android UI开发专题涵盖了构建美观、易用且功能丰富的界面所需的关键知识点。以下是一些主要的Android UI开发...

    Building a Dictionary of Image Fragments

    综上所述,《构建图像碎片词典》这篇论文提出的自动构建图像碎片词典的方法,不仅提升了计算机视觉任务的性能,还开辟了图像处理的新途径,尤其是在图像分类、物体定位和创意应用方面展现了巨大的潜力。这种方法的...

    android sdk3.0 activity 之子 fragments

    Fragment是一个可嵌入到Activity中的UI组件,它允许开发者在不同屏幕尺寸上动态地组合和管理用户界面。在Android SDK 3.0中,对Fragment的使用和理解变得尤为重要。 首先,我们要了解Fragment的基本概念。Fragment...

    Android UI Design by Jessica Thornsby , 0分

    Android UI Design:Plan, design, and build engaging user interfaces for your Android applications What You Will Learn Develop a user interface that adheres to all the core material design ...

    谈谈Android Fragments 详细使用

    Android Fragments 是Android开发中的一个重要概念,自Android 3.0(API级别11)引入,主要用于解决不同屏幕尺寸设备上的UI适配问题。Fragments 提供了一种灵活的方式来构建动态和可重构的用户界面,特别是在平板...

    Android Fragments 使用的一些建议demo

    在Android应用开发中,Fragments是重要的组件,用于构建可重用、动态的用户界面,尤其是在平板电脑和大屏幕设备上。本示例"Android Fragments 使用的一些建议demo"提供了一些最佳实践,帮助开发者更高效地使用...

Global site tag (gtag.js) - Google Analytics