谁用过ScrollView中添加fragment加载listview

Android UI详解之Fragment实例详解
-------------
新增文件夹...
新增文件夹
(多个标签用逗号分隔)
上一篇我们讲解了Fragment的加载方式,这次我们以一个实例来讲解:
&LinearLayout
xmlns:android="/apk/res/android"
xmlns:tools="/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" &
&fragment class="com.xys.fragmentdemo.TitleFragment"
android:id="@+id/titles"
android:layout_weight="1"
android:layout_width="match_parent"
android:layout_height="match_parent"
&FrameLayout android:id="@+id/detials"
android:layout_weight="1"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:background="@android:color/darker_gray"&&/FrameLayout&
&/LinearLayout &
以上布局文件中使用了fragment标签和FrameLayout标签。Android Fragment使用 中介绍了2中嵌入Fragment的方法,这个实例中都用到,从布局文件看到有了fragment标签,这是一种使用方法,FrameLayout标签将会成为第二种加载fragment的载体view。
TitleFragment:
package com.xys.
import android.app.F
import android.app.FragmentT
import android.app.ListF
import android.os.B
import android.view.V
import android.widget.ArrayA
import android.widget.ListV
public class TitleFragment extends ListFragment {
public int currentChoosePosition=0;
public int showChoosePosition=-1;
public void onListItemClick(ListView l, View v, int position, long id) {
// TODO Auto-generated method stub
showDetials(position);
public void onActivityCreated(Bundle savedInstanceState) {
// TODO Auto-generated method stub
super.onActivityCreated(savedInstanceState);
setListAdapter(new ArrayAdapter&String&(getActivity(), android.R.layout.simple_list_item_activated_1,Data.TitleData));
if(savedInstanceState!=null){
currentChoosePosition=savedInstanceState.getInt("currentChoose",0);
showChoosePosition=savedInstanceState.getInt("showChoose",-1);
getListView().setChoiceMode(ListView.CHOICE_MODE_SINGLE);
public void onSaveInstanceState(Bundle outState) {
// TODO Auto-generated method stub
super.onSaveInstanceState(outState);
outState.putInt("currentChoose", currentChoosePosition);
outState.putInt("showChoose", showChoosePosition);
public void showDetials(int index){
currentChoosePosition=
getListView().setItemChecked(index, true);
if(showChoosePosition!=currentChoosePosition){
//获取详情Fragment的实例
DetialFragment df=DetialFragment.newInstance(index);
//获取FragmentTransaction 实例
FragmentTransaction ft=getFragmentManager().beginTransaction();
//使用DetailsFragment 的实例
ft.replace(R.id.detials, df);
ft.setTransition(FragmentTransaction.TRANSIT_FRAGMENT_FADE);
ft.commit();
showChoosePosition=
DetialFragment:
package com.xys.
import android.app.F
import android.content.res.TypedA
import android.os.B
import android.util.TypedV
import android.view.LayoutI
import android.view.V
import android.view.ViewG
import android.widget.ScrollV
import android.widget.TextV
//DetailsFragment 中使用newInstance(int index)方法产生DetailsFragment 实例并接受整型参数,重载了onCreateView方法创建view
public class DetialFragment extends Fragment {
public static DetialFragment newInstance(int index) {
// TODO Auto-generated method stub
DetialFragment df=new DetialFragment();
Bundle bundle=new Bundle();
bundle.putInt("index", index);
df.setArguments(bundle);
public View onCreateView(LayoutInflater inflater, ViewGroup container,
Bundle savedInstanceState) {
// TODO Auto-generated method stub
if(container==null){
ScrollView scrollView=new ScrollView(getActivity());
TextView tv=new TextView(getActivity());
int padding=(int)TypedValue.PLEX_UNIT_DIP, 4, getActivity().getResources().getDisplayMetrics());
tv.setPadding(padding, padding, padding, padding);
scrollView.addView(tv);
tv.setText(Data.ContextData[getArguments().getInt("index",0)]);
return scrollV
package com.xys.
public class Data {
public static final String TitleData[]={"Title1","Title2","Title3","Title4","Title5"};
public static final String ContextData[]={"Context1","Context2","Context3","Context4","Context5"};
国际惯例 上效果图:
相关资讯  — 
相关文档  — 
发布时间: 21:51:55
同类热门经验
52830次浏览
127164次浏览
38786次浏览
77830次浏览
45412次浏览
OPEN-OPEN, all rights reserved.ANDROID Fragment中动态创建ImageView
在一个ACTIVITY (CXmain) 中包含N个Fragment.现在在其中一个Fragment中需要动态创建imageview 但是运行时却出错.
目的是在在Fragment中创建一个可以滑动显示图片的功能 利用ScrollView来实现.下面是代码:
public class CtFragment extends Fragment
implements OnClickListener {
......................
public View onCreateView(LayoutInflater inflater, ViewGroup container,
Bundle savedInstanceState) {
...................
layout = (LinearLayout) getActivity().findViewById(R.id.layout);
for(int i = 0; i & 8; i++)
通过资源文件来获得指定一个Drawable对象
Drawable drawable = getResources().getDrawable(R.drawable.fmj);
ImageView imageView = new ImageView(getActivity());
imageView.setImageDrawable(drawable);
layout.addView(imageView);
是不是getActivity() 这样用不正确......
按赞数排序
上面的答案有帮助吗?如果还有问题,请提出来,如果对答案满意,请顶一下,并标记为采纳答案,谢谢!
getActivity()确实不能这样用。
正确用法应该是:
//绑定Fragment的布局文件
fragmentLayout = inflater.inflate(R.layout.fragment_layout, container,false);
layout = (LinearLayout) fragmentLayout.findViewById(R.id.layout);
ImageView imageView = new ImageView(getActivity());这样的用法应该可以。
滑动显示图片参考一下
其他相似问题
相关参考资料Fragment小结
Fragment是Android3.0之后加入的新特性,通常人们叫它碎片。但是,我觉得把它理解成一个View模块比较好,虽然它不是继承自View。如果阅读过就知道它是内置View对象从而实现View的特性。在设计模式里面通常说到,扩展一个类的方式有2种,第一就是类继承,第二就是对象组合,而开发经验告诉我们,要多用对象组合。所以Fragment是直接继承Object,组合View来实现View的特性的。
这里先看一下Fragment的类继承结构:
vcD4KPHA+PHN0cm9uZz7J+sP81tzG2qO6PC9zdHJvbmc+PC9wPgo8cD5GcmFnbWVudNPrQWN0aXZpdHnSu9H5vt/T0Mn6w/zW3Mbao6zI58/Co7o8L3A+CjxwPjxpbWcgc3JjPQ=="/uploadfile/Collfiles/7.png" alt="\">
而Fragment的生命周期是附着在使用Fragment的Activity的生命周期之上,这里有个图片来比较下:
源码分析:
Fragment.java位于SDK的android.app包下,通过查看源码,可以看到Fragment的实现方式是组合View对象和ViewGroup对象,在Fragment还有startActivity和startActivityFroResult方法,是不是跟Activity很像?!在使用Fragment的时候一般要实现2个生命周期方法onCreate和onPause,方便保存数据,在重写onCreateView时,可以向ViewGroup对象container中添加某个布局文件代表的View,形如return
inflater.inflate(R.layout.yourlayout,container, false);
Fragment的基本运用
分为布局文件中使用Fragment和在程序中动态添加Fragment
布局文件中使用Fragment
第一步:为Fragment指定一个布局文件,如下fragmentlayout.xml
第二步:自己写一个类MyFragment继承Fragment类
package com.example.
import android.app.F
import android.os.B
import android.view.LayoutI
import android.view.V
import android.view.ViewG
public class MyFragment extends Fragment{
public View onCreateView(LayoutInflater inflater, ViewGroup container,Bundle savedInstanceState) {
return inflater.inflate(R.layout.fragmentlayout, container, false);
重写onCreateView方法,返回自己定义的Fragment的layout,这里注意onCreateView方法的参数ViewGroup对象!特别注意。
第三步:在主Activity的布局文件activity_main.xml中这样写道
这里务必为fragment指定一个tag或是id属性!!不然运行会出错。
在程序中动态添加Fragment
还记的重写Fragment中的onCreateView方法中的第二个参数吧,是ViewGroup对象。说明Fragment是被添加到ViewGroup对象中去的,从SDK文档中可以看到ViewGroup的子类是很多的,这里截个图
有了这个基础,我们在程序中动态添加Fragment.
前一二步都跟在布局文件中添加Fragment一样的,只有在主Activity的layout文件中指定Fragment的方式不一样,这里我们指定的是一个ViewGroup子类。
&frameLayout
android:id="@+id/framelayout"
android:layout_width="wrap_content"
android:layout_height="wrap_content"/&
这里定义的是FrameLayout对象,它是ViewGroup的子类,它作为一个容器把Fragment添加进去。
那么在程序中应该怎样去添加呢?
package com.example.
import android.app.A
import android.app.FragmentT
import android.os.B
public class MainActivity extends Activity {
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
MyFragment fragment = new MyFragment();
FragmentTransaction ft = getFragmentManager().beginTransaction() ;
ft.add(R.id.framelayout, fragment);
ft.commit() ;
从代码中可以看到,是将fragment对象加入到FrameLayout中去。最后别忘了commit提交。这里必须注意了,对于同一个FragmentTransaction对象只能提交一次!!!使用FragmentTransaction时需要多注意一下。由此我们可以想象到,我们可以根据不同的需求选择适当的容器来装Fragment,如ScrollView,LinearLayout等
如果你通过继承LinearLayout来自定义过控件,那么你肯定对Fragment有很似成相识的感觉。当你继承LinearLayout时需要实现3个构造方法,在这3个构造方法中,你通过LayoutInflater将layout布局文件转换成View,然后为这个View赋予各种监听方法和事件响应。反过来思考一下Fragment是不是这样实现的呢?当我们继承Fragment时,我们需要实现onCreateView方法,该方法中就是通过LayoutInflater对象将layout布局文件转换成View,然后为这个View添加各种响应时间和时间响应,最后添加到ViewGroup的子类中去。
Fragment的事务处理
Fragment的事物处理是通过FragmentTransaction来实现的,它是通过FragmentManager得到的。这里说一下它几个常用的方法:
add :向某个ViewGroup容器中添加Fragment对象
hide:隐藏某个Fragment,让其不可见。
remove:移除某个Fragment
show:显示某个Fragment
setCustomAnimations:指定Fragment切换时的动画
commit:提交,同一个FragmentTransaction只能commit一次,不然会出错。
Fragment的综合应用:
模仿手机QQ主界面的4个视图,详情请见某大神的总结:http://blog.csdn.net/guolin_blog/article/details/
您对本文章有什么意见或着疑问吗?请到您的关注和建议是我们前行的参考和动力&&
您的浏览器不支持嵌入式框架,或者当前配置为不显示嵌入式框架。谁用过ScrollView中添加Fragment_百度知道
谁用过ScrollView中添加Fragment
提问者采纳
但是fragment的确是个好东西,不太好评价是否是大炮打蚊子。没有细看文中例子,很多fragment能做的功能 view未必能做fragment其实可以理解为一个略微阉割的activity
其他类似问题
等待您来回答
下载知道APP
随时随地咨询
出门在外也不愁

我要回帖

更多关于 fragment中listview 的文章

 

随机推荐