首页 > 其他分享 >Fragment初学4——使用Fragment的子类ListFragment

Fragment初学4——使用Fragment的子类ListFragment

时间:2023-09-21 10:07:53浏览次数:48  
标签:ListFragment Fragment 子类 void id Callbacks Activity public


ListFragment的例子, MainActivity左边显示一个ListFragment,右边是一个FrameLayout容器,该FrameLayout容器将会动态更新其中的Fragment


MainActivity布局文件如下:


<?xml version="1.0" encoding="utf-8"?> 
  
 <!-- 定义一个水平排列的LinearLayout,并指定使用中等分隔条 --> 
  
 <LinearLayout xmlns:android=" 
  http://schemas.android.com/apk/res/android" 
  
     android:layout_width="match_parent" 
  
     android:layout_height="match_parent" 
  
     android:layout_marginLeft="16dp" 
  
     android:layout_marginRight="16dp" 
  
     android:divider="?android:attr/dividerHorizontal" 
  
     android:orientation="horizontal" 
  
     android:showDividers="middle" > 
  

     <!-- 添加一个Fragment --> 
  

     <fragment 
  
         android:id="@+id/fragment_list_main" 
  
         android:name="com.example.activity.MyListFragment" 
  
         android:layout_width="0dp" 
  
         android:layout_height="match_parent" 
  
         android:layout_weight="1" /> 
  
     <!-- 添加一个FrameLayout容器 --> 
  

     <FrameLayout 
  
         android:id="@+id/framelayout_content_main" 
  
         android:layout_width="0dp" 
  
         android:layout_height="match_parent" 
  
         android:layout_weight="2" /> 
  

 </LinearLayout>



MainActivity.java类




public class MainActivity extends Activity implements MyListFragment.Callbacks { 
 
 
 
 
  
 
 
ContentFragment是具体的Fragment类,代码会上传上去 
  
 
 

    @Override 
 
 
 

    protected void onCreate(Bundle savedInstanceState) { 
 
 
 

     super.onCreate(savedInstanceState); 
 
 
 

     setContentView(R.layout.activity_main); 
 
 
 

    } 
 
 
 
 
  
 
 

    // 实现Callbacks接口必须实现的方法 
 
 
 

    public void onItemSelected(Integer id) { 
 
 
 

     // 创建Bundle,准备向Fragment传入参数 
 
 
 

     Bundle arguments = new Bundle(); 
 
 
 

     arguments.putInt("id", id); 
 
 
 

     // 创建ContentFragment对象 
 
 
 

     ContentFragment fragment = new ContentFragment(); 
 
 
 

     // 向Fragment传入参数 
 
 
 

     fragment.setArguments(arguments); 
 
 
 

     // 使用fragment替换framelayout_content_main容器当前显示的Fragment 
 
 
 

     getFragmentManager().beginTransaction() 
 
 
 

       .replace(R.id.framelayout_content_main, fragment).commit(); 
 
 
 

    } 
 
 
 

   }


开发ListFragment的子类无需重写onCreatView()方法,类似ListActivity,只要调用ListFragment的setAdapter()方法为其设置Adapter即可。



MyListFragment.java类


public class MyListFragment extends ListFragment { 
 
 
 

    private Callbacks mCallbacks; 
 
 
 
 
  
 
 

    // 定义一个回调接口,该Fragment所在Activity需要实现该接口 
 
 
 

    // 该Fragment将通过该接口与它所在的Activity交互 
 
 
 

    public interface Callbacks { 
 
 
 

     public void onItemSelected(Integer id); 
 
 
 

    } 
 
 
 
 
  
 
 

    @Override 
 
 
 

    public void onCreate(Bundle savedInstanceState) { 
 
 
 

     super.onCreate(savedInstanceState); 
 
 
 

     // 为该ListFragment设置Adapter 
 
 
 

     ArrayAdapter adapter = new ArrayAdapter(getActivity(), 
 
 
 

       android.R.layout.simple_list_item_1, new String[] { 
 
 
 

         "DialogFragment", "ListFragment", "WebViewFragment", 
 
 
 

         "PreferenceFragment" }); 
 
 
 

     setListAdapter(adapter); 
 
 
 

    } 
 
 
 
 
  
 
 

    // 当该Fragment被添加、显示到Activity时,回调该方法 
 
 
 

    @Override 
 
 
 

    public void onAttach(Activity activity) { 
 
 
 

     super.onAttach(activity); 
 
 
 

     // 如果Activity没有实现Callbacks接口,抛出异常 
 
 
 

     if (!(activity instanceof Callbacks)) { 
 
 
 

      throw new IllegalStateException( 
 
 
 

        "MyListFragment所在的Activity必须实现Callbacks接口!"); 
 
 
 

     } 
 
 
 

     // 把该Activity当成Callbacks对象 
 
 
 

     mCallbacks = (Callbacks) activity; 
 
 
 

    } 
 
 
 
 
  
 
 

    // 当该Fragment从它所属的Activity中被删除时回调该方法 
 
 
 

    @Override 
 
 
 

    public void onDetach() { 
 
 
 

     super.onDetach(); 
 
 
 

     // 将mCallbacks赋为null。 
 
 
 

     mCallbacks = null; 
 
 
 

    } 
 
 
 
 
  
 
 

    // 当用户点击某列表项时激发该回调方法 
 
 
 

    @Override 
 
 
 

    public void onListItemClick(ListView listView, View view, int position, 
 
 
 

      long id) { 
 
 
 

     super.onListItemClick(listView, view, position, id); 
 
 
 

     // 激发mCallbacks的onItemSelected方法 
 
 
 

     mCallbacks.onItemSelected(position); 
 
 
 

    } 
 
 
 
 
  
 
 

    public void setActivateOnItemClick(boolean activateOnItemClick) { 
 
 
 

     getListView().setChoiceMode( 
 
 
 

       activateOnItemClick ? ListView.CHOICE_MODE_SINGLE 
 
 
 

         : ListView.CHOICE_MODE_NONE); 
 
 
 

    } 
 
 
 

   }



源码

标签:ListFragment,Fragment,子类,void,id,Callbacks,Activity,public
From: https://blog.51cto.com/u_6947107/7548557

相关文章

  • Fragment初学8——Fragment在Android开发中的应用2
    Fragment都是依附于Activity的,通信方式大致也分为如下几种:如果Activity中包含自己管理的Fragment的引用,可以通过直接引用访问所有的Fragment的public方法 如果Activity中未保存任何Fragment的引用,那么可以通过getFragmentManager.findFragmentByTag()或者findFragmentById()获得......
  • 2、protected: 这种权限是为继承而设计的,protected所修饰的成员,对所有子类是可访问的,但
    2、protected:这种权限是为继承而设计的,protected所修饰的成员,对所有子类是可访问的,但只对同包的类是可访问的,对外包的非子类是不可以访问; protected权限的访问范围是:当前包所有的类+当前包以外的子类。 ......
  • 9个视图子类,视图类,视图集,ViewSetMixin, drf之路由
    1.9个视图子类fromrest_framework.genericsimportListAPIView,CreateAPIView,ListCreateAPIViewfromrest_framework.genericsimportRetrieveAPIView,DestroyAPIView,UpdateAPIViewfromrest_framework.genericsimportRetrieveUpdateDestroyAPIView,RetrieveDes......
  • 9个视图子类、视图集、drf之路由
    9个视图子类fromrest_framework.genericsimportListAPIView,CreateAPIView,ListCreateAPIViewfromrest_framework.genericsimportRetrieveAPIView,DestroyAPIView,UpdateAPIViewfromrest_framework.genericsimportRetrieveUpdateDestroyAPIView,RetrieveDestroy......
  • 9个视图子类
    视图类五层第一层:继承APIview,五个接口第二层:GenericAPIView,继承APIview(两个类属性+defgetpostgetputdelete)第三层:五个视图扩展类GenericAPIView+(RetrieveModelMixin,CreateModelMixin,DestroyModelMixin,ListModelMixin,UpdateModelMixin)(两个类属性+defgetpostget......
  • Android入门教程 | DialogFragment 的使用
    弹窗,是常见的一种提示方式。DialogFragment是在3.0时引入的,是一种特殊的Fragment,用于在Activity上展示一个模态的对话框。DialogFragment示例确定UI样式首先我们得知道做成什么样。一般来说简单的弹窗是一个标题,一端文字内容。或者带有一两个按钮。这里我们做一个有标题和文字......
  • 多个fragment切换,而不重新加载数据的实现
     多个fragment切换,而不重新加载数据的实现1、在xml中添加一个framlayout<FrameLayoutandroid:id="@+id/framelayout"android:layout_width="match_parent"android:layout_weight="1"android:layout_height="0dp"......
  • 通过父类创建子类
    通过父类创建子类 usingSystem;usingSystem.Collections.Generic;usingSystem.Linq;usingSystem.Text;usingSystem.Threading.Tasks;namespaceZZX.Model.ViewModel{///<summary>///用户所申请的工作///</summary>publicclassUserJob:J......
  • Android入门教程 | Fragment 基础概念
    什么是Fragment?Fragment,直译为“碎片”,“片段”。Fragment表示FragmentActivity中的行为或界面的一部分。可以在一个Activity中组合多个片段,从而构建多窗格界面,并在多个Activity中重复使用某个片段。可以将片段视为Activity的模块化组成部分,它具有自己的生命周期,能接收自......
  • [转]C++使用虚函数的时候,子类也要使用virtual关键字吗
    原文地址:https://blog.csdn.net/gao1440156051/article/details/45670715父类使用虚函数是为了让子类重写,那子类重写的时候也需要带virtual关键字吗?比如:classBase{virtualboolinit();};classDerived{virtualboolinit();//这里的vitual是必须的吗?好像不用也能编译通过呃…......