Fragment主要是要解决Android屏幕适配问题。同一个Activity内可包含N(>=0)个Fragment。
回顾了一下Fragment,做了个小例子。如图:
用一个Activity来操作三个Fragment。
MainActivity代码如下:
package com.imeiren.qqfragment;
import android.graphics.Color;
import android.os.Bundle;
import android.support.v4.app.FragmentActivity;
import android.view.View;
import android.view.View.OnClickListener;
import android.view.Window;
import android.widget.TextView;
public class MainActivity extends FragmentActivity implements OnClickListener {
private static final boolean D = true;
private TextView mMessage;
private TextView mContact;
private TextView mNews;
private int mIndex = 0;
private final int COMMON_COLOR = Color.parseColor("#343434");
private final int SELECT_COLOR = Color.parseColor("#18B4ED");
private MessageFragment messageFragment;
private ContactFragment contactFragment;
private NewsFragment newsFragment;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
requestWindowFeature(Window.FEATURE_NO_TITLE);
setContentView(R.layout.activity_main);
mMessage = (TextView) findViewById(R.id.message);
mMessage.setOnClickListener(this);
mContact = (TextView) findViewById(R.id.contact);
mContact.setOnClickListener(this);
mNews = (TextView) findViewById(R.id.news);
mNews.setOnClickListener(this);
mIndex = mMessage.getId();
setFragment(mIndex);
}
private void setFragment(int index) {
if (D) {
System.out.println("setFragment(int index)");
}
switch (index) {
case R.id.message:
if (messageFragment == null) {
messageFragment = new MessageFragment();
}
getFragmentManager().beginTransaction()
.replace(R.id.container, messageFragment).commit();
break;
case R.id.contact:
if (contactFragment == null) {
contactFragment = new ContactFragment();
}
getFragmentManager().beginTransaction()
.replace(R.id.container, contactFragment).commit();
break;
case R.id.news:
if (newsFragment == null) {
newsFragment = new NewsFragment();
}
getFragmentManager().beginTransaction()
.replace(R.id.container, newsFragment).commit();
break;
default:
break;
}
}
private void resetFooter() {
mMessage.setTextColor(COMMON_COLOR);
mContact.setTextColor(COMMON_COLOR);
mNews.setTextColor(COMMON_COLOR);
}
@Override
public void onClick(View v) {
int viewId = v.getId();
switch (viewId) {
case R.id.message:
if (mIndex != R.id.message) {
mIndex = R.id.message;
resetFooter();
mMessage.setTextColor(SELECT_COLOR);
setFragment(R.id.message);
}
break;
case R.id.contact:
if (mIndex != R.id.contact) {
mIndex = R.id.contact;
resetFooter();
mContact.setTextColor(SELECT_COLOR);
setFragment(R.id.contact);
}
break;
case R.id.news:
if (mIndex != R.id.news) {
mIndex = R.id.news;
resetFooter();
mNews.setTextColor(SELECT_COLOR);
setFragment(R.id.news);
}
break;
default:
break;
}
}
}
主要完成三个View的点击处理逻辑。
其布局是:
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:tools="http://schemas.android.com/tools"
android:id="@+id/base"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:orientation="vertical"
tools:context="${packageName}.${activityClass}" >
<RelativeLayout
android:id="@+id/header"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:background="@drawable/skin_header_bar_bg" >
</RelativeLayout>
<FrameLayout
android:id="@+id/container"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_weight="1" >
</FrameLayout>
<LinearLayout
android:id="@+id/footer"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:background="@drawable/skin_slidetab_bg"
android:orientation="horizontal" >
<RelativeLayout
android:layout_width="wrap_content"
android:layout_height="match_parent"
android:layout_weight="1" >
<TextView
android:id="@+id/message"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_centerInParent="true"
android:gravity="center"
android:text="消息"
android:textColor="#18B4ED"
android:textSize="18sp" />
</RelativeLayout>
<RelativeLayout
android:layout_width="wrap_content"
android:layout_height="match_parent"
android:layout_weight="1" >
<TextView
android:id="@+id/contact"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_centerInParent="true"
android:gravity="center"
android:text="联系人"
android:textSize="18sp" />
</RelativeLayout>
<RelativeLayout
android:layout_width="wrap_content"
android:layout_height="match_parent"
android:layout_weight="1" >
<TextView
android:id="@+id/news"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_centerInParent="true"
android:gravity="center"
android:text="动态"
android:textSize="18sp" />
</RelativeLayout>
</LinearLayout>
</LinearLayout>
本来是想仿手机QQ用TabWidget来切换三个Fragment的,但是它的PNG文件名混淆得都很难搜索出想要的图片,肉眼找了半天也没找出来!果断用个TextView来代替。
例子源码下载地址