最近android项目需要用到Fragment,就抽空要久了一下Fragment,记录下。
一、项目效果图
二、整个activity分上下两个Fragment,上面是ListView的列表,下面是详细内容的Fragment。
看先看activity_main 的布局:
<RelativeLayout 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:paddingBottom="@dimen/activity_vertical_margin" android:paddingLeft="@dimen/activity_horizontal_margin" android:paddingRight="@dimen/activity_horizontal_margin" android:paddingTop="@dimen/activity_vertical_margin" tools:context=".MainActivity" > <LinearLayout android:id="@+id/activity_person_info_fragment_layout" android:layout_width="match_parent" android:layout_height="match_parent" android:orientation="vertical" > </LinearLayout> <LinearLayout android:id="@+id/ll_detail_view" android:layout_width="match_parent" android:layout_height="100dp" android:layout_marginLeft="10dp" android:layout_marginRight="10dp" android:orientation="vertical" android:layout_alignParentBottom="true" > </LinearLayout> </RelativeLayout>
fragment_list.xml
<?xml version="1.0" encoding="utf-8"?> <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" android:layout_width="match_parent" android:layout_height="match_parent" android:orientation="vertical" > <ListView android:id="@+id/fragment_listview" android:layout_width="fill_parent" android:layout_height="450dp" > </ListView> </LinearLayout>
fragment_detail.xml
<?xml version="1.0" encoding="utf-8"?> <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" android:layout_width="match_parent" android:layout_height="match_parent" android:orientation="vertical" > <ScrollView android:layout_width="fill_parent" android:layout_height="wrap_content" > <LinearLayout android:layout_width="fill_parent" android:layout_height="wrap_content" android:orientation="vertical" > <TextView android:id="@+id/detail_textview" android:layout_width="fill_parent" android:layout_height="wrap_content" android:layout_marginLeft="5dp" android:lines="50" /> </LinearLayout> </ScrollView> </LinearLayout>
list_item.xml listViewAdapter需要
<?xml version="1.0" encoding="utf-8"?> <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" android:layout_width="match_parent" android:layout_height="match_parent" android:orientation="horizontal" > <ImageView android:id="@+id/image" android:layout_width="50dp" android:layout_height="50dp" android:layout_marginLeft="5dp" android:contentDescription="@null" /> <TextView android:id="@+id/text_view" android:layout_width="match_parent" android:layout_height="wrap_content" android:layout_gravity="center" android:layout_marginLeft="10dp" /> </LinearLayout>
接下里看看Avtivity代码:
ListInfoFragment.java
package com.johnny.fragmentdemo; import java.util.ArrayList; import java.util.HashMap; import java.util.List; import java.util.Map; import android.content.Context; import android.os.Bundle; import android.view.LayoutInflater; import android.view.View; import android.view.ViewGroup; import android.widget.AdapterView; import android.widget.AdapterView.OnItemClickListener; import android.widget.BaseAdapter; import android.widget.ImageView; import android.widget.ListView; import android.widget.TextView; public class ListInfoFragment extends BaseFragment { private ListView listView; private ListInfoAdapter listAdapter; private List<Map<String,Object>> list; private int resid [] = {R.drawable.mingren,R.drawable.zuozhu,R.drawable.ying,R.drawable.kakaxi,R.drawable.you}; private String titles [] = {"漩涡鸣人","宇智波佐助","春野樱","旗木卡卡西","宇智波鼬"}; private int conntets [] = {R.string.mingren,R.string.zuozhu,R.string.ying,R.string.kakaxi,R.string.you}; private Context mContext; @Override public void onCreate(Bundle savedInstanceState) { // TODO Auto-generated method stub super.onCreate(savedInstanceState); mContext = this.getActivity(); dataInit(); } @Override public void onStart() { // TODO Auto-generated method stub super.onStart(); } @Override public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) { // TODO Auto-generated method stub //加载frangement View fragmentView = inflater.inflate(R.layout.fragment_list, container, false); setFragmentView(fragmentView); viewInit(); return fragmentView; } private void viewInit(){ listView = (ListView) findViewById(R.id.fragment_listview); listAdapter = new ListInfoAdapter(); listView.setAdapter(listAdapter); listView.setOnItemClickListener(new OnItemClickListener() { @Override public void onItemClick(AdapterView<?> parent, View view, int position, long id) { // TODO Auto-generated method stub //获取详细内容的Fragment,通过Activity获取 DetailInfoFragment fragment = ((MainActivity)ListInfoFragment.this.getActivity()).getDetailInfoFragment(); if(fragment != null){ switch (position) { case 0: fragment.getOnDetailInfoListener().setContent(getString(conntets[0])); break; case 1: fragment.getOnDetailInfoListener().setContent(getString(conntets[1])); break; case 2: fragment.getOnDetailInfoListener().setContent(getString(conntets[2])); break; case 3: fragment.getOnDetailInfoListener().setContent(getString(conntets[3])); break; case 4: fragment.getOnDetailInfoListener().setContent(getString(conntets[4])); break; default: break; } } } }); } private void dataInit(){ list = new ArrayList<Map<String,Object>>(); for(int i=0;i<resid.length;i++){ Map<String ,Object> map = new HashMap<String,Object>(); map.put("title", titles[i]); map.put("image", resid[i]); list.add(map); } } private class ListInfoAdapter extends BaseAdapter{ @Override public int getCount() { // TODO Auto-generated method stub return list.size(); } @Override public Object getItem(int position) { // TODO Auto-generated method stub return list.get(position); } @Override public long getItemId(int position) { // TODO Auto-generated method stub return position; } @SuppressWarnings("unused") @Override public View getView(int position, View convertView, ViewGroup parent) { // TODO Auto-generated method stub ListInfoHolder holder = null; if(holder == null){ holder = new ListInfoHolder(); if(convertView == null){ convertView = LayoutInflater.from(mContext).inflate(R.layout.list_item, null); } holder.imageview = (ImageView) convertView.findViewById(R.id.image); holder.textView = (TextView) convertView.findViewById(R.id.text_view); convertView.setTag(holder); }else{ holder = (ListInfoHolder)convertView.getTag(); } Map<String,Object> map = list.get(position); holder.imageview.setImageResource((Integer)map.get("image")); holder.textView.setText((String)map.get("title")); return convertView; } } private class ListInfoHolder{ ImageView imageview; TextView textView; } }
DetailInfoFragment.java
package com.johnny.fragmentdemo; import android.content.Context; import android.os.Bundle; import android.view.LayoutInflater; import android.view.View; import android.view.ViewGroup; import android.widget.TextView; public class DetailInfoFragment extends BaseFragment { private Context mContext; private TextView textView; private OnDetailInfoListener onDetailInfoListener; /** * @author * 定义接口 */ public interface OnDetailInfoListener{ public void setContent(String content); } @Override public void onCreate(Bundle savedInstanceState) { // TODO Auto-generated method stub super.onCreate(savedInstanceState); mContext = this.getActivity(); //实现接口 onDetailInfoListener = new OnDetailInfoListener(){ @Override public void setContent(String content) { // TODO Auto-generated method stub textView.setText(content); } }; } @Override public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) { // TODO Auto-generated method stub View fragmentView = inflater.inflate(R.layout.fragement_detail, container,false); setFragmentView(fragmentView); viewInit(); return fragmentView; } private void viewInit(){ textView = (TextView) findViewById(R.id.detail_textview); } public OnDetailInfoListener getOnDetailInfoListener() { return onDetailInfoListener; } public void setOnDetailInfoListener(OnDetailInfoListener onDetailInfoListener) { this.onDetailInfoListener = onDetailInfoListener; } }
MainActivity.java
package com.johnny.fragmentdemo; import android.os.Bundle; import android.support.v4.app.FragmentActivity; public class MainActivity extends FragmentActivity { private ListInfoFragment listInfoFragment; private DetailInfoFragment detailInfoFragment; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); viewInit(); } private void viewInit(){ listInfoFragment = new ListInfoFragment(); detailInfoFragment = new DetailInfoFragment(); getSupportFragmentManager().beginTransaction(). add(R.id.activity_person_info_fragment_layout,listInfoFragment). add(R.id.ll_detail_view,detailInfoFragment). commit(); } public DetailInfoFragment getDetailInfoFragment() { return detailInfoFragment; } }
相关推荐
"Fragment应用实例"通常包括以下关键知识点: 1. **Fragment的生命周期**:Fragment有自己的生命周期,与Activity相似但略有不同。它有onAttach(), onCreate(), onCreateView(), onViewCreated(), ...
Fragment设计的初衷是为了更好地支持不同屏幕尺寸和配置,使得开发者可以将一个应用程序的用户界面拆分成多个可重用的部分。在本文中,我们将深入探讨Fragment的基本概念、生命周期以及如何在实际项目中使用Fragment...
"模仿新浪微博界面Fragment应用"这个项目旨在帮助新手和入门开发者理解如何在Android应用中实现类似微博客户端的底部菜单导航功能,并熟练掌握Fragment的使用。下面将详细阐述Fragment的基本概念、作用以及如何在...
"Activity和Fragment应用"的示例项目提供了对这两种组件的实际应用,通过查看和运行该项目,开发者可以深入理解它们的工作原理和使用方式。帮助文档为开发者提供了快速查找和学习的途径,对于初/中级开发者来说,这...
在"fragment应用demo下载"中,提供的示例代码"Fragment_show_hide"着重展示了如何在Android应用中创建、显示和隐藏Fragment。 1. **Fragment的生命周期** Fragment有自己的生命周期,包括onCreate(), onCreateView...
本示例“android开发,一个漂亮的Fragment应用的例子”是针对Android 4.0及以上版本设计的,展示了如何优雅地使用Fragment来提升用户体验。 Fragment最初在Android 3.0(API级别11)引入,目的是为了更好地支持平板...
在Android开发中,Fragment是应用程序界面的一个模块化组件,它可以在Activity中添加、删除或替换。Fragment的概念是在Android 3.0(API级别11)引入的,旨在提高UI的可复用性和适应性,特别是在平板电脑等大屏幕...
Android Fragment应用实战Demo,向ActivityGroup说再见 源码程序 Android Fragment应用实战Demo,向ActivityGroup说再见 源码程序 Android Fragment应用实战Demo,向ActivityGroup说再见 源码程序
Fragment是Android应用开发中的一个重要组件,它是在API 11(Android 3.0 Honeycomb)版本中引入的,主要用于支持在大屏幕设备如平板电脑上进行多面板布局。随着智能手机和平板电脑的普及,Fragment在手机应用设计中...
基于新包 androidx.fragment.app.Fragment androidx.fragment.app.FragmentManager androidx.fragment.app.FragmentTransaction 一个帮助你学习fragment的练手项目
通过以上步骤,你已经掌握了在Android Studio 3.1.4中实现一个简单的Fragment应用的基本流程。继续探索Fragment的高级特性,如Fragment之间的通信、动态添加和替换Fragment,以及使用Back栈管理Fragment的生命周期,...
在这个Demo中,可能是后者,因为它是一个静态的Fragment应用: ```java FragmentManager fragmentManager = getSupportFragmentManager(); FragmentTransaction transaction = fragmentManager.beginTransaction();...
在Android应用开发中,Fragment是Android SDK中的一个重要组件,它被设计用来支持多屏幕布局和在活动(Activity)中管理用户界面的模块化部分。Fragment最初在Android 3.0 (API级别11)中引入,现在已经成为Android...
在Android应用开发中,Fragment是Android SDK中的一个重要组件,它允许开发者在单个活动中展示多个交互式的...记住,实践是最好的老师,尝试动手创建并不断优化你的Fragment应用,你会对Android开发有更深入的理解。
在本教程中,我们将深入探讨如何利用`HorizontalScrollView`控件来实现类似QQ5.0的滑动侧边栏,并结合`Fragment`进行应用。 首先,`HorizontalScrollView`是Android SDK提供的一种可以水平滚动视图的布局。与常规的...
通过深入学习和实践,可以掌握更复杂的Fragment应用场景,如Fragment的回退栈管理、Fragment间的通信、Fragment在FragmentPagerAdapter中的使用等。理解并熟练运用Fragment,将有助于提升Android应用的用户体验和...
通过以上步骤,我们可以构建出一个具备左右滑动切换、标题滑动及颜色变化的Fragment应用。这个项目对初学者来说是一个很好的学习资源,能够帮助他们理解Android中Fragment、ViewPager以及手势滑动的实现机制。同时,...
8. **多Fragment应用场景**: 在复杂的Android应用中,通常会用多个Fragment组合成一个Activity,如导航抽屉、底部导航栏等设计。每个Fragment专注于特定的功能,提高代码可复用性和可维护性。 9. **生命周期协调**:...