android笔记4——Fragment的使用

说明第一下:按照前面的方式我们创建了项目,如果使用的是最新的ADT,Minimum Android SDK选的是android2.*或1.*,此时会默认创建一个兼容的项目,——appcompat_v7,这个项目还是不能删除的,删除会报错。。

说明第二下:项目创建好了之后,发现layout文件夹(布局)中会有默认两个文件:adtivity和fragment文件:

1、Fragment概述:

Fragment意思为碎片,片段,说白了就是模块,说道模块,就不用我多说了。。

特征:

Fragment总是“嵌入”activity中使用的,作为activity中的界面组成部分;

一个activity可以包含多个Fragment,一个Fragment也可以被多个activity复用;

Fragment可以响应自己的事件,也拥有自己的生命周期。

首先我们先看一下我们要达到什么要求:

  

2、fragment_main.xml文件:

内容如下:

<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:tools="http://schemas.android.com/tools"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:orientation="vertical"
    tools:context="com.javen.xresource.activity.fragment.MainFragment" >

    <TextView
        android:id="@+id/ftxv"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:text="@string/fragment" />
    <Button
        android:id="@+id/btn"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:text="@string/change_fragment"/>
    <Button
        android:id="@+id/btn2"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:text="@string/change_activity"/>

</LinearLayout>

在fragment中定义了两个按钮和一个文本显示,以及在activity中也定义了一个文本显示,点击fragment不同按钮控制文本显示。

activity_main.xml内容如下:

<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:tools="http://schemas.android.com/tools"
    android:id="@+id/container"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:orientation="vertical"
    tools:context="com.javen.xresource.activity.MainActivity"
    tools:ignore="MergeRootFrame">

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

    <!-- xml方式在activity中嵌入fragment -->
    <fragment
        android:name="com.javen.xresource.activity.fragment.MainFragment"
        android:id="@+id/mft"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"/>

</LinearLayout>

3、创建MainFragment.java类:

package com.javen.xresource.activity.fragment;

import android.app.Fragment;
import android.os.Bundle;
import android.view.LayoutInflater;
import android.view.View;
import android.view.View.OnClickListener;
import android.view.ViewGroup;
import android.widget.Button;
import android.widget.TextView;

import com.javen.xresource.activity.R;

public class MainFragment extends Fragment {
	private TextView fragmentTextView;
	private Button button;

	public MainFragment() {
	}

	@Override
	public View onCreateView(LayoutInflater inflater, ViewGroup container,
			Bundle savedInstanceState) {
		View rootView = inflater.inflate(R.layout.fragment_main, container,
				false);	//使用fragment_main.xml初始化Fragment

		button = (Button) rootView.findViewById(R.id.btn);	//获取Fragment中的Button
		fragmentTextView = (TextView) rootView.findViewById(R.id.ftxv);	//获取Fragment中的TextView

		button.setOnClickListener(new OnClickListener() {	//设置按钮的监听事件
			@Override
			public void onClick(View v) {
				fragmentTextView.setText("我被fragment点击了...");
			}
		});

		return rootView;
	}
}

此时Fragment已经搞定了。。。

4、MainActivity.java

代码如下:

package com.javen.xresource.activity;

import android.app.Activity;
import android.app.Fragment;
import android.os.Bundle;
import android.view.Menu;
import android.view.MenuItem;
import android.view.View;
import android.view.View.OnClickListener;
import android.widget.Button;
import android.widget.TextView;

public class MainActivity extends Activity {

	private Button button;
	private TextView activityTextView;
	@Override
	protected void onCreate(Bundle savedInstanceState) {
		super.onCreate(savedInstanceState);
		setContentView(R.layout.activity_main);

		/*if (savedInstanceState == null) {
			getFragmentManager().beginTransaction()
					.add(R.id.container, new MainFragment()).commit();	//java代码方式在activity中嵌入Fragment,与前面xml方式一样
		}*/	

		activityTextView = (TextView) findViewById(R.id.atxv);	//获取activity中的TextView

		Fragment fragment = getFragmentManager().findFragmentById(R.id.mft);	//获取activity中的fragment
		button = (Button) fragment.getView().findViewById(R.id.btn2);	//获取fragment中的Button2
		button.setOnClickListener(new OnClickListener() {
			@Override
			public void onClick(View v) {
				activityTextView.setText("我被activity点击了...");
			}
		});
	}

	@Override
	public boolean onCreateOptionsMenu(Menu menu) {

		getMenuInflater().inflate(R.menu.main, menu);
		return true;
	}

	@Override
	public boolean onOptionsItemSelected(MenuItem item) {
		int id = item.getItemId();
		if (id == R.id.action_settings) {
			return true;
		}
		return super.onOptionsItemSelected(item);
	}
}

将项目运行即可。。。

6、问题来了:Button2 改变activity中TextView的操作能不能放在Fragment?--> 延伸出:Fragment能不能与Activity通信?

衍生问题后面再说,通信肯定是可以的。

至于对TextView的操作都放在Fragment中。。。本人尝试过,使用:

getActivity().findViewById(R.id.atxv);

是不能获取到Activity中的View元素的,此语句返回的是null。所以Button2的操作还是得放在activity中。

至于原因?欢迎大家发表评论来讨论这个问题。。。

android笔记4——Fragment的使用

时间: 2024-12-12 16:28:39

android笔记4——Fragment的使用的相关文章

【Android笔记】Fragment中显示高德地图

本文来自:fair-jm.iteye.com 转截请注明出处 官网的教程是在Activity下 在Fragment下在高德论坛找到一些方法 试了下可以显示 但是切换后总会有些问题 比如切换后就是新的了 切换后地图就不显示了 我这种方式可以在切换后保持地图状态 但是得限定屏幕为水平或者竖直 如果翻转的话也会报错 布局文件: 1 <?xml version="1.0" encoding="utf-8"?> 2 <RelativeLayout xmlns

Android笔记:Fragment与ViewPager组合时,如何在FragmentActicity获取Fragment对象

项目中有一处需要监听宿主的控件,再去更新Fragment页面,由此必须去获取Fragment里的对象; 在FragmentActivity + Fragment组合里是可以使用以下方案: MedicFragment Medic= (MedicFragment ) getSupportFragmentManager().findFragmentById(R.id.fragment_medic); 但是在ViewPager里是获取不了Fragment的对象,经过资料查才找,在这里找到了答案:http

Android 笔记-Fragment 与 Activity之间传递数据

Fragment 与 Activity之间传递数据有两种方法,一种是使用setArgument,一种是使用接口回调.下面先学习第一种方法. (1)使用setArgument方法: 为了便于理解,我在这里打个比喻:假如Activity是皇帝,它设立了三个部门(如三省六部),分别是Fragment1,Fragment2和Fragemnt3: 现在他现在要吩咐部门Fragment1去做一些事情,比如说:领兵攻打岛国!!好,它肯定不自己跑去告诉该部门的. 一般来说,会有个宰相或者太监总管来负责皇帝口谕是

Android学习笔记之fragment的静态加载和动态加载

1.xml布局文件: main.xml 1 <RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android" 2 android:layout_width="match_parent" 3 android:layout_height="match_parent" > 4 5 <LinearLayout 6 android:id="@+i

Android笔记(十一)第一个Fragment

Fragment是碎片的意思,能够參照Activity来理解Fragment,由于它们都能包括布局,都有自己的生命周期. 以下我们要让主活动包括两个碎片,而且让两个碎片充满屏幕 1.首先,新建两个碎片的布局文件 left.xml <?xml version="1.0" encoding="utf-8"? > <LinearLayout xmlns:android="http://schemas.android.com/apk/res/an

Android笔记(六十八) Fragment总结

Fragment的产生: 为了适应各种尺寸的屏幕,谷歌推出Fragment,可以把Fragment成Activity的一个组成部分,它拥有自己的生命周期.可以接收并处理用户的各种事件,还可以动态的增删改某个Fragment Fragment的使用 可以把Fragment当成普通的控件使用,直接写在布局文件中,然后新建一个继承自Fragment的类加载这个布局,然后在Activity的布局文件中直接引用这个Fragment,就是这么简单: MainActivity.java package com

Android笔记(十九) Android中的Fragment

通常我们使用Activity来展示界面,但是在手机上界面可能显示的很好看,但在平板上,因为平板的屏幕非常大,手机的界面放在平板上可能会出现控件被拉长.控件之间间距变大等问题.为了更好的体验效果,在Activity中嵌入“子Activity”,然后每个“子Activity”又可以拥有自己的布局,于是Fragment登场了. 什么是Fragment? Fragment是Activity界面中的一部分或一种行为,你可以把多个Fragment组合到一个Acvitity中来创建一个多面界面,并且你也可以在

android 笔记

#关系ViewGroup 是从view继承的Layout 是ViewGroup 继承的,布局可以添加元素片段里可以存放布局Activity 可以移除 Fragment,增加片段,通过 getFragmentManager 来管理 Fragment 通过findFragmentById来获得Fragment的元素修改通过 getView() 取得layout 之后修改里面的元素如果 Layout 还没有实例化,通过 LayoutInflater 来操作通过inflate方法可以找到layout文件

android笔记6——intent的使用

今天挑出一节专门来说一下使用intent和intentfilter进行通信. 场景:一个Activity启动另一个Activity. 前面已经讲了Fragment的切换,Fragment顾名思义是基于碎片切换的,假如我们要切换屏幕,或者是service组件等等,这就要用到Intent. 此外还想说明一下,Intent还具有很好的设计思想在里面的.它将各种"启动意图"封装成一个一致编程模型,利于高层次的解耦. 1.Intent属性 Component属性 先来看一段代码: <spa