FrameLayout和Fragment处理Android应用UI布局实例

FrameLayout和Fragment处理Android应用UI布局实例,第1张

概述将Fragment与Layout结合使用,一般都是主Activity以frame填充Activity的方式交互管理Fragment:

将Fragment与Layout结合使用,一般都是主Activity以frame填充Activity的方式交互管理Fragment :

1.由于用到getSupportFragmentManager()之类,所以主Activity的extends需为FragmentActivity:

  public class MainActivity extends FragmentActivity{    ..........  }

2.主Activity的layout(xml文件)中建立多个Frame并定义其AndroID:ID="@+ID/XXX"
3.主Activity内 *** 作函数中,由查找ID来对这些FrameLayout进行Activity填充:
   添加语句如下

复制代码 代码如下:
   getSupportFragmentManager().beginTransaction().add(R.ID.fragment_container2,new NullFrag()).commit();


   取得支持Fragment管理()->开始交易()->添加(frame的ID,Fragment).交付(); 
   替换语句如下
   getSupportFragmentManager().beginTransaction().replace(R.ID.fragment_container2,new NullFrag()).commit();
   取得支持Fragment管理()->开始交易()->替代(frame的ID,Fragment).交付();
例:

复制代码 代码如下:
    public voID click_btn_flag02(VIEw vIEw){
         getSupportFragmentManager().beginTransaction().replace(R.ID.fragment_container2,new MIDFrag()).commit();
    }


注:函数参数要用VIEw

下面我们来看实例


效果图的左边是一个列表,右边是列表item的详情。
先看一下布局文件(layout):

<?xml version="1.0" enCoding="utf-8"?> <linearLayout xmlns:androID="@R_301_6822@://schemas.androID.com/apk/res/androID"  androID:orIEntation="horizontal" androID:layout_wIDth="match_parent"  androID:layout_height="match_parent">  <fragment      androID:ID="@+ID/Titles" androID:layout_weight="1"   androID:layout_wIDth="0px" androID:layout_height="match_parent" />  <FrameLayout androID:ID="@+ID/details" androID:layout_weight="1"   androID:layout_wIDth="0px" androID:layout_height="match_parent"   androID:background="?androID:attr/detailsElementBackground" /> </linearLayout> 

        布局文件中使用了fragment标签和FrameLayout标签。AndroID Fragment使用 中介绍了2中嵌入Fragment的方法,这个实例中都用到,从布局文件看到有了fragment标签,这是一种使用方法,FrameLayout标签将会成为第二种加载fragment的载体vIEw。
        看一下程序实现(com.fragment.main.TitlesFragment):

public class TitlesFragment extends ListFragment {   int mCurCheckposition = 0;  int mShownCheckposition = -1;   @OverrIDe  public voID onActivityCreated(Bundle savedInstanceState) {   super.onActivityCreated(savedInstanceState);                  setlistadapter(new ArrayAdapter<String>(getActivity(),androID.R.layout.simple_List_item_activated_1,Shakespeare.TitleS)); //使用静态数组填充列表   if (savedInstanceState != null) {    mCurCheckposition = savedInstanceState.getInt("curChoice",0);    mShownCheckposition = savedInstanceState.getInt("shownChoice",-1);   }    getListVIEw().setChoiceMode(ListVIEw.CHOICE_MODE_SINGLE);    showDetails(mCurCheckposition);  }   @OverrIDe  public voID onSaveInstanceState(Bundle outState) {   super.onSaveInstanceState(outState);    outState.putInt("curChoice",mCurCheckposition);   outState.putInt("shownChoice",mShownCheckposition);  }   @OverrIDe  public voID onListItemClick(ListVIEw l,VIEw v,int position,long ID) {   showDetails(position);  }   /**   *显示ListvIEw item 详情   */  voID showDetails(int index) {   mCurCheckposition = index;    getListVIEw().setItemChecked(index,true);     if (mShownCheckposition != mCurCheckposition) {      DetailsFragment df = DetailsFragment.newInstance(index);     FragmentTransaction ft = getFragmentManager()       .beginTransaction();     ft.replace(R.ID.details,df);     ft.setTransition(FragmentTransaction.TRANSIT_FRAGMENT_FADE);     ft.commit();     mShownCheckposition = index;    }   }  } 

TitlesFragment
TitlesFragment继承自Fragment的子类ListFragment,使用了一个静态数组填充列表,重写了onListItemClick方法,showDetails方法展示ListVIEw item的详情。

DetailsFragment df = DetailsFragment.newInstance(index);//获取详情Fragment的实例FragmentTransaction ft = getFragmentManager().beginTransaction();//获取FragmentTransaction 实例ft.replace(R.ID.details,df); //使用DetailsFragment 的实例ft.setTransition(FragmentTransaction.TRANSIT_FRAGMENT_FADE);ft.commit();//提交

看一下DetailsFragment :

public class DetailsFragment extends Fragment {   /**  * Create a new instance of DetailsFragment,initialized to  * show the text at 'index'.  */  public static DetailsFragment newInstance(int index) {   DetailsFragment f = new DetailsFragment();   // Supply index input as an argument.     Bundle args = new Bundle();   args.putInt("index",index);   f.setArguments(args);   return f;  }   @OverrIDe  public VIEw onCreateVIEw(LayoutInflater inflater,VIEwGroup container,Bundle savedInstanceState) {   if (container == null) {       return null;   }   ScrollVIEw scroller = new ScrollVIEw(getActivity());   TextVIEw text = new TextVIEw(getActivity());    int padding = (int) TypedValue.applyDimension(     TypedValue.COMPLEX_UNIT_DIP,4,getActivity().getResources()       .getdisplayMetrics());   text.setpadding(padding,padding,padding);   scroller.addVIEw(text);   text.setText(Shakespeare.DIALOGUE[getArguments().getInt("index",0)]);   return scroller;  } } 

 
DetailsFragment 中使用newInstance(int index)方法产生DetailsFragment 实例并接受整型参数,重载了onCreateVIEw方法创建vIEw。

总结

以上是内存溢出为你收集整理的FrameLayout和Fragment处理Android应用UI布局实例全部内容,希望文章能够帮你解决FrameLayout和Fragment处理Android应用UI布局实例所遇到的程序开发问题。

如果觉得内存溢出网站内容还不错,欢迎将内存溢出网站推荐给程序员好友。

欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/web/1141510.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2022-05-31
下一篇 2022-05-31

发表评论

登录后才能评论

评论列表(0条)

保存