首页 > 其他分享 >Android开发 - (适配器)Adapter类中ArrayObjectAdapter实现类详细解析

Android开发 - (适配器)Adapter类中ArrayObjectAdapter实现类详细解析

时间:2024-08-02 16:42:29浏览次数:15  
标签:Adapter Movie 适配器 new ArrayObjectAdapter import public TextView

简介

  • 用于 Android TV 的 Leanback 库,用于绑定对象数组到 UI 组件

具体作用

  • ArrayObjectAdapter 是 RecyclerView 和 Adapter 系列中用于处理列表数据的一种适配器类型主要用于 Android TV 的 Leanback 库中的 BrowseFragmentDetailFragment 和 PlaybackOverlayFragment 等组件它简化了列表项的管理,支持多种类型的视图和数据项

    管理数据列表

    • ArrayObjectAdapter 用于将数据列表与 RecyclerView 绑定在一起。它允许将数据项(如电影、电视节目、应用程序等)添加到适配器中并将这些数据项显示在用户界面上

    支持不同类型的视图

    • 你可以在同一个 ArrayObjectAdapter 实例中管理不同类型的数据项。它支持多种视图类型,并根据数据项的类型自动选择合适的视图进行显示

    提供数据操作方法

    • ArrayObjectAdapter 提供了多种方法来操作数据,如添加删除更新和替换数据项。这些操作会自动更新视图,以反映数据的变化

    与 Presenter 结合使用

    • ArrayObjectAdapter 结合 Presenter 使用,Presenter 负责将数据项呈现到视图中。Presenter 负责将数据项转换为视图的表示,并处理用户交互

参数、方法解析

  • ArrayObjectAdapter();:使用默认的 PresenterSelector 创建 ArrayObjectAdapter 实例。这种构造方法通常用于简单的场景其中每种数据项都使用相同的 Presenter

    ArrayObjectAdapter adapter = new ArrayObjectAdapter();
    
  • ArrayObjectAdapter(Presenter presenter);构造方法使用指定的 Presenter 创建 ArrayObjectAdapter 实例适配器将使用这个 Presenter 来展示数据项

    ArrayObjectAdapter adapter = new ArrayObjectAdapter(new MoviePresenter());
    
    • 参数解析
      • presenter:用于展示数据项的 Presenter 对象Presenter 对象负责将数据项转换为视图并处理用户交互
  • ArrayObjectAdapter(PresenterSelector presenterSelector);构造方法使用 PresenterSelector 创建 ArrayObjectAdapter 实例适配器将根据数据项的类型动态选择合适的 Presenter 来展示数据

    ArrayObjectAdapter adapter = new ArrayObjectAdapter(new CustomPresenterSelector());
    
    • 参数解析
      • presenterSelector:用于选择 Presenter 的 PresenterSelector 对象PresenterSelector 对象 根据数据项的类型选择合适的 Presenter
  • ArrayObjectAdapter(Presenter presenter, int initialCapacity);构造方法;用指定的 Presenter 和初始容量创建 ArrayObjectAdapter 实例适配器将使用这个 Presenter 来展示数据,并初始化内部数据存储的容量

    ArrayObjectAdapter adapter = new ArrayObjectAdapter(new MoviePresenter(), 20);
    
    • 参数解析
      • presenter:用于展示数据项的 Presenter 对象
      • initialCapacity初始容量指定适配器内部数据存储的初始容量,有助于优化性能
  • ArrayObjectAdapter(PresenterSelector presenterSelector, int initialCapacity);构造方法使用 PresenterSelector 和初始容量创建 ArrayObjectAdapter 实例适配器将根据数据项的类型动态选择合适的 Presenter 来展示数据,并初始化内部数据存储的容量

ArrayObjectAdapter adapter = new ArrayObjectAdapter(new CustomPresenterSelector(), 20);
  • 参数解析

    • presenterSelector:用于选择 Presenter 的 PresenterSelector 对象
    • initialCapacity初始容量指定适配器内部数据存储的初始容量
  • adapter.add(Object item);向适配器中添加一个数据项

adapter.add(new Movie("Inception", "A mind-bending thriller"));
  • 参数解析

    • item要添加的数据项。通常是一个对象(如 Movie 实例)
  • adapter.add(int index, Object item);在指定索引位置插入一个数据项

    adapter.add(0, new Movie("The Matrix", "A sci-fi classic"));
    
    • 参数解析
      • index插入位置的索引,从 0 开始
      • item:要插入的数据项
  • addAll(Collection<?> items);:向适配器中添加一个数据项集合

    List<Movie> movies = new ArrayList<Movie>();
    movies.add(new Movie("Inception", "A mind-bending thriller"));
    movies.add(new Movie("The Matrix", "A sci-fi classic"));
    adapter.addAll(movies);
    
    • 参数解析
      • items:要添加的数据项集合。通常是一个 Collection(如 List<Movie>)
  • adapter.addAll(int index, Collection<?> items);:在指定索引位置插入一个数据项集合

    List<Movie> movies = new ArrayList<Movie>();
    movies.add(new Movie("Inception", "A mind-bending thriller"));
    movies.add(new Movie("The Matrix", "A sci-fi classic"));
    adapter.addAll(0, movies);
    
    • 参数解析
      • index:插入位置的起始索引从 0 开始
      • items:要插入的数据项集合
  • adapter.replace(int index, Object item);替换指定索引位置的数据项

adapter.replace(0, new Movie("Interstellar", "A journey through space"));
  • 参数解析

    • index:要替换的位置的索引,从 0 开始
    • item新的数据项,将替换旧的数据项
  • adapter.remove(Object item);移除指定的数据项

    adapter.remove(movie);
    
    • 参数解析
      • item要移除的数据项
  • adapter.removeItems(int position, int count);从指定位置开始移除多个数据项

    adapter.removeItems(0, 2);	//从第一个位置开始计数移除2项数据项
    
    • 参数解析
      • position起始位置的索引,从 0 开始
      • count: 要移除的数据项数量
  • adapter.clear();清除所有数据项

  • adapter.get(int position);获取指定位置的数据项

    Movie movie = (Movie) adapter.get(0);
    
    • 参数解析
      • position位置的索引,从 0 开始
  • adapter.size();返回适配器中数据项的数量

int count = adapter.size();
  • adapter.indexOf(Object item);返回指定数据项的索引
int index = adapter.indexOf(movie);
  • 参数解析

    • item:要查找索引的数据项
  • adapter.notifyArrayItemRangeChanged(int positionStart, int itemCount);通知适配器在指定范围内的数据项发生了变化

adapter.notifyArrayItemRangeChanged(0, 2);
  • 参数解析

    • positionStart起始位置的索引,从 0 开始
    • itemCount变化的数据项数量
  • adapter.notifyChanged();通知适配器数据发生了变化

使用环境解析

  • ArrayObjectAdapter 是 Leanback 库中的一个核心类,用于在 TV 应用中管理和显示数据项。它常用于以下场景

    BrowseFragment 场景

    • BrowseFragment 是一个常见的 TV 应用布局用于展示分类的内容列表ArrayObjectAdapter 用于管理各个分类下的内容

    • 示例代码

      import android.os.Bundle;
      import androidx.fragment.app.FragmentActivity;
      import androidx.leanback.app.BrowseFragment;
      import androidx.leanback.widget.ArrayObjectAdapter;
      import androidx.leanback.widget.HeaderItem;
      import androidx.leanback.widget.ListRow;
      import androidx.leanback.widget.ListRowPresenter;
      import androidx.leanback.widget.Presenter;
      import android.widget.TextView;
      import android.view.ViewGroup;
      
      public class MainActivity extends FragmentActivity {
      
          @Override
          protected void onCreate(Bundle savedInstanceState) {
              super.onCreate(savedInstanceState);
              setContentView(R.layout.activity_main);
      
              // 检查是否有已保存的实例状态
              if (savedInstanceState == null) {
                  // 没有已保存的实例状态时,加载 MyBrowseFragment
                  getSupportFragmentManager().beginTransaction()
                      .replace(R.id.main_browse_fragment, new MyBrowseFragment())
                      .commitNow();
              }
          }
      
          // 自定义 BrowseFragment 类,显示电影分类和列表
          public static class MyBrowseFragment extends BrowseFragment {
      
              @Override
              public void onActivityCreated(Bundle savedInstanceState) {
                  super.onActivityCreated(savedInstanceState);
      
                  // 创建 ArrayObjectAdapter,用于管理 ListRow 数据项
                  ArrayObjectAdapter rowsAdapter = new ArrayObjectAdapter(new ListRowPresenter());
      
                  // 创建第一个分类
                  HeaderItem headerItem1 = new HeaderItem(0, "Category 1"); // 创建头部项,参数为ID和标题
                  ArrayObjectAdapter category1Adapter = new ArrayObjectAdapter(new MoviePresenter()); // 创建分类适配器,使用自定义的 MoviePresenter
                  category1Adapter.add(new Movie("Inception", "A mind-bending thriller")); // 添加电影数据到分类适配器
                  category1Adapter.add(new Movie("The Matrix", "A sci-fi classic"));
                  rowsAdapter.add(new ListRow(headerItem1, category1Adapter)); // 将分类适配器作为 ListRow 添加到主适配器
      
                  // 创建第二个分类
                  HeaderItem headerItem2 = new HeaderItem(1, "Category 2");
                  ArrayObjectAdapter category2Adapter = new ArrayObjectAdapter(new MoviePresenter());
                  category2Adapter.add(new Movie("Interstellar", "A journey through space"));
                  category2Adapter.add(new Movie("The Dark Knight", "A superhero thriller"));
                  rowsAdapter.add(new ListRow(headerItem2, category2Adapter));
      
                  // 设置 BrowseFragment 的适配器
                  setAdapter(rowsAdapter);
              }
          }
      
          // 电影类,包含标题和描述
          public static class Movie {
              private String title;
              private String description;
      
              public Movie(String title, String description) {
                  this.title = title;
                  this.description = description;
              }
      
              // Getter 方法
              public String getTitle() {
                  return title;
              }
      
              public String getDescription() {
                  return description;
              }
          }
      
          // 电影 Presenter 类,用于展示电影数据
          public static class MoviePresenter extends Presenter {
      
              @Override
              public ViewHolder onCreateViewHolder(ViewGroup parent) {
                  // 创建 TextView 作为 ViewHolder 的视图
                  TextView textView = new TextView(parent.getContext());
                  return new ViewHolder(textView);
              }
      
              @Override
              public void onBindViewHolder(ViewHolder viewHolder, Object item) {
                  // 绑定电影数据到 ViewHolder
                  Movie movie = (Movie) item; // 强制转换 item 为 Movie
                  TextView textView = (TextView) viewHolder.view;
                  textView.setText(movie.getTitle()); // 设置 TextView 显示电影标题
              }
      
              @Override
              public void onUnbindViewHolder(ViewHolder viewHolder) {
                  // 清理资源,例如移除监听器
                  TextView textView = (TextView) viewHolder.view;
                  textView.setOnClickListener(null); // 移除点击监听器
              }
          }
      }
      

    DetailsFragment 场景

    • DetailsFragment 用于展示选中项的详细信息ArrayObjectAdapter 可以用于管理和展示详细信息的不同部分

    • 示例代码

      import android.os.Bundle;
      import androidx.fragment.app.FragmentActivity;
      import androidx.leanback.app.DetailsFragment;
      import androidx.leanback.widget.ArrayObjectAdapter;
      import androidx.leanback.widget.ClassPresenterSelector;
      import androidx.leanback.widget.FullWidthDetailsOverviewRowPresenter;
      import androidx.leanback.widget.ListRow;
      import androidx.leanback.widget.ListRowPresenter;
      import androidx.leanback.widget.Presenter;
      import androidx.leanback.widget.DetailsOverviewRow;
      import android.widget.TextView;
      import android.view.ViewGroup;
      
      public class MainActivity extends FragmentActivity {
      
          @Override
          protected void onCreate(Bundle savedInstanceState) {
              super.onCreate(savedInstanceState);
              setContentView(R.layout.activity_main);
      
              // 检查是否有已保存的实例状态
              if (savedInstanceState == null) {
                  // 没有已保存的实例状态时,加载 MyDetailsFragment
                  getSupportFragmentManager().beginTransaction()
                      .replace(R.id.main_details_fragment, new MyDetailsFragment())
                      .commitNow();
              }
          }
      
          // 自定义 DetailsFragment 类,显示电影详情和相关内容
          public static class MyDetailsFragment extends DetailsFragment {
      
              @Override
              public void onActivityCreated(Bundle savedInstanceState) {
                  super.onActivityCreated(savedInstanceState);
      
                  // 创建 Presenter 选择器,用于管理不同类型的数据行
                  ClassPresenterSelector selector = new ClassPresenterSelector();
                  selector.addClassPresenter(DetailsOverviewRow.class, new FullWidthDetailsOverviewRowPresenter(new MovieDetailsPresenter())); // 添加详情 Presenter
                  selector.addClassPresenter(ListRow.class, new ListRowPresenter()); // 添加列表 Presenter
      
                  // 创建 ArrayObjectAdapter,用于管理数据行
                  ArrayObjectAdapter adapter = new ArrayObjectAdapter(selector);
      
                  // 创建详情行
                  Movie movie = new Movie("Inception", "A mind-bending thriller");
                  DetailsOverviewRow detailsOverviewRow = new DetailsOverviewRow(movie);
                  adapter.add(detailsOverviewRow);
      
                  // 创建相关内容行
                  ArrayObjectAdapter relatedAdapter = new ArrayObjectAdapter(new MoviePresenter());
                  relatedAdapter.add(new Movie("The Matrix", "A sci-fi classic"));
                  relatedAdapter.add(new Movie("Interstellar", "A journey through space"));
                  HeaderItem headerItem = new HeaderItem(0, "Related Content");
                  adapter.add(new ListRow(headerItem, relatedAdapter));
      
                  // 设置 DetailsFragment 的适配器
                  setAdapter(adapter);
              }
          }
      
          // 电影类,包含标题和描述
          public static class Movie {
              private String title;
              private String description;
      
              public Movie(String title, String description) {
                  this.title = title;
                  this.description = description;
              }
      
              // Getter 方法
              public String getTitle() {
                  return title;
              }
      
              public String getDescription() {
                  return description;
              }
          }
      
          // 电影详情 Presenter 类,用于展示电影详细信息
          public static class MovieDetailsPresenter extends Presenter {
      
              @Override
              public ViewHolder onCreateViewHolder(ViewGroup parent) {
                  // 创建 TextView 作为 ViewHolder 的视图
                  TextView textView = new TextView(parent.getContext());
                  return new ViewHolder(textView);
              }
      
              @Override
              public void onBindViewHolder(ViewHolder viewHolder, Object item) {
                  // 绑定电影详细信息到 ViewHolder
                  Movie movie = (Movie) item; // 强制转换 item 为 Movie
                  TextView textView = (TextView) viewHolder.view;
                  textView.setText(movie.getDescription()); // 设置 TextView 显示电影描述
              }
      
              @Override
              public void onUnbindViewHolder(ViewHolder viewHolder) {
                  // 清理资源,例如移除监听器
                  TextView textView = (TextView) viewHolder.view;
                  textView.setOnClickListener(null); // 移除点击监听器
              }
          }
      
          // 电影 Presenter 类,用于展示电影数据
          public static class MoviePresenter extends Presenter {
      
              @Override
              public ViewHolder onCreateViewHolder(ViewGroup parent) {
                  // 创建 TextView 作为 ViewHolder 的视图
                  TextView textView = new TextView(parent.getContext());
                  return new ViewHolder(textView);
              }
      
              @Override
              public void onBindViewHolder(ViewHolder viewHolder, Object item) {
                  // 绑定电影数据到 ViewHolder
                  Movie movie = (Movie) item; // 强制转换 item 为 Movie
                  TextView textView = (TextView) viewHolder.view;
                  textView.setText(movie.getTitle()); // 设置 TextView 显示电影标题
              }
      
              @Override
              public void onUnbindViewHolder(ViewHolder viewHolder) {
                  // 清理资源,例如移除监听器
                  TextView textView = (TextView) viewHolder.view;
                  textView.setOnClickListener(null); // 移除点击监听器
              }
          }
      }
      

    VerticalGridFragment 场景

    • VerticalGridFragment 用于展示一个垂直网格布局的内容列表ArrayObjectAdapter 用于管理网格中的内容

    • 示例代码

      import android.os.Bundle;
      import androidx.fragment.app.FragmentActivity;
      import androidx.leanback.app.VerticalGridFragment;
      import androidx.leanback.widget.ArrayObjectAdapter;
      import androidx.leanback.widget.GridItemPresenter;
      import androidx.leanback.widget.Presenter;
      import androidx.leanback.widget.VerticalGridPresenter;
      import android.widget.TextView;
      import android.view.ViewGroup;
      
      public class MainActivity extends FragmentActivity {
      
          @Override
          protected void onCreate(Bundle savedInstanceState) {
              super.onCreate(savedInstanceState);
              setContentView(R.layout.activity_main);
      
              // 检查是否有已保存的实例状态
              if (savedInstanceState == null) {
                  // 没有已保存的实例状态时,加载 MyVerticalGridFragment
                  getSupportFragmentManager().beginTransaction()
                      .replace(R.id.main_vertical_grid_fragment, new MyVerticalGridFragment())
                      .commitNow();
              }
          }
      
          // 自定义 VerticalGridFragment 类,显示电影网格
          public static class MyVerticalGridFragment extends VerticalGridFragment {
      
              private static final int NUM_COLUMNS = 3; // 网格列数
      
              @Override
              public void onActivityCreated(Bundle savedInstanceState) {
                  super.onActivityCreated(savedInstanceState);
                  
                  // 设置 VerticalGridFragment 的标题
                  setTitle("Movies");
                  
                  // 创建 VerticalGridPresenter,设置焦点高亮效果
                  setGridPresenter(new VerticalGridPresenter(FocusHighlight.ZOOM_FACTOR_LARGE, false));
                  
                  // 设置网格的列数
                  setNumberOfColumns(NUM_COLUMNS);
      
                  // 创建 ArrayObjectAdapter,用于管理网格数据项
                  ArrayObjectAdapter adapter = new ArrayObjectAdapter(new GridItemPresenter());
      
                  // 添加数据项到网格适配器
                  adapter.add(new Movie("Inception", "A mind-bending thriller"));
                  adapter.add(new Movie("The Matrix", "A sci-fi classic"));
                  adapter.add(new Movie("Interstellar", "A journey through space"));
      
                  // 设置 VerticalGridFragment 的适配器
                  setAdapter(adapter);
              }
          }
      
          // 电影类,包含标题和描述
          public static class Movie {
              private String title;
              private String description;
      
              public Movie(String title, String description) {
                  this.title = title;
                  this.description = description;
              }
      
              // Getter 方法
              public String getTitle() {
                  return title;
              }
      
              public String getDescription() {
                  return description;
              }
          }
      
          // 网格项 Presenter 类,用于展示网格项数据
          public static class GridItemPresenter extends Presenter {
      
              @Override
              public ViewHolder onCreateViewHolder(ViewGroup parent) {
                  // 创建 TextView 作为 ViewHolder 的视图
                  TextView textView = new TextView(parent.getContext());
                  // 设置 TextView 的大小
                  textView.setLayoutParams(new ViewGroup.LayoutParams(300, 300));
                  // 使 TextView 可获取焦点
                  textView.setFocusable(true);
                  // 使 TextView 在触摸模式下可获取焦点
                  textView.setFocusableInTouchMode(true);
                  // 返回包含 TextView 的 ViewHolder
                  return new ViewHolder(textView);
              }
      
              @Override
              public void onBindViewHolder(ViewHolder viewHolder, Object item) {
                  // 绑定网格项数据到 ViewHolder
                  Movie movie = (Movie) item; // 强制转换 item 为 Movie
                  TextView textView = (TextView) viewHolder.view;
                  // 设置 TextView 显示电影标题
                  textView.setText(movie.getTitle());
              }
      
              @Override
              public void onUnbindViewHolder(ViewHolder viewHolder) {
                  // 清理资源,例如移除监听器
                  TextView textView = (TextView) viewHolder.view;
                  // 移除点击监听器
                  textView.setOnClickListener(null);
              }
          }
      }
      

完整代码示例

  • 使用 BrowseFragment 显示多个电影分类

    • 创建主布局文件activity_main.xml

      <?xml version="1.0" encoding="utf-8"?>
      <FrameLayout xmlns:android="http://schemas.android.com/apk/res/android"
          android:id="@+id/fragment_container"  <!-- 这是 Fragment 的容器 -->
          android:layout_width="match_parent"
          android:layout_height="match_parent"/>
      
    • 自定义 BrowseFragment类MyBrowseFragment.java

      //自定义 BrowseFragment 类,使用 ArrayObjectAdapter 来管理分类和电影数据
      import android.os.Bundle;
      import androidx.leanback.app.BrowseFragment;
      import androidx.leanback.widget.ArrayObjectAdapter;
      import androidx.leanback.widget.HeaderItem;
      import androidx.leanback.widget.ListRow;
      import androidx.leanback.widget.ListRowPresenter;
      import androidx.leanback.widget.Presenter;
      import android.view.ViewGroup;
      import android.widget.TextView;
      
      public class MyBrowseFragment extends BrowseFragment {
      
          @Override
          public void onActivityCreated(Bundle savedInstanceState) {
              super.onActivityCreated(savedInstanceState);
      
              // 创建一个 ArrayObjectAdapter,用于管理不同的 ListRow
              ArrayObjectAdapter rowsAdapter = new ArrayObjectAdapter(new ListRowPresenter());
      
              // 创建第一个电影分类(例如“热门电影”)
              HeaderItem headerItem1 = new HeaderItem(0, "Popular Movies");
              // 创建一个 ArrayObjectAdapter 来管理这个分类中的电影项
              ArrayObjectAdapter category1Adapter = new ArrayObjectAdapter(new MoviePresenter());
              // 向适配器中添加电影项
              category1Adapter.add(new Movie("Inception", "A mind-bending thriller"));
              category1Adapter.add(new Movie("The Matrix", "A sci-fi classic"));
              // 创建一个 ListRow,将标题和适配器组合起来,并添加到主适配器中
              rowsAdapter.add(new ListRow(headerItem1, category1Adapter));
      
              // 创建第二个电影分类(例如“新片上映”)
              HeaderItem headerItem2 = new HeaderItem(1, "New Releases");
              ArrayObjectAdapter category2Adapter = new ArrayObjectAdapter(new MoviePresenter());
              category2Adapter.add(new Movie("Interstellar", "A journey through space"));
              category2Adapter.add(new Movie("The Dark Knight", "A superhero thriller"));
              rowsAdapter.add(new ListRow(headerItem2, category2Adapter));
      
              // 设置 BrowseFragment 的适配器,这样它就知道如何显示数据
              setAdapter(rowsAdapter);
          }
      
          // 电影类,包含电影的标题和描述
          public static class Movie {
              private String title;
              private String description;
      
              public Movie(String title, String description) {
                  this.title = title;
                  this.description = description;
              }
      
              // 获取电影标题
              public String getTitle() {
                  return title;
              }
      
              // 获取电影描述
              public String getDescription() {
                  return description;
              }
          }
      
          // 电影 Presenter 类,用于将电影数据显示到屏幕上
          public static class MoviePresenter extends Presenter {
      
              @Override
              public ViewHolder onCreateViewHolder(ViewGroup parent) {
                  // 创建并初始化 TextView 作为 ViewHolder 的视图
                  TextView textView = new TextView(parent.getContext());
                  textView.setLayoutParams(new ViewGroup.LayoutParams(
                      ViewGroup.LayoutParams.MATCH_PARENT, // 宽度填满父容器
                      ViewGroup.LayoutParams.WRAP_CONTENT)); // 高度根据内容自动调整
                  textView.setPadding(16, 16, 16, 16); // 设置 TextView 的内边距
                  textView.setTextSize(18); // 设置文字大小
                  return new ViewHolder(textView); // 返回 ViewHolder 对象
              }
      
              @Override
              public void onBindViewHolder(ViewHolder viewHolder, Object item) {
                  // 将电影数据绑定到 ViewHolder 的视图上
                  Movie movie = (Movie) item; // 将 item 转换为 Movie 对象
                  TextView textView = (TextView) viewHolder.view;
                  textView.setText(movie.getTitle()); // 设置 TextView 的内容为电影标题
              }
      
              @Override
              public void onUnbindViewHolder(ViewHolder viewHolder) {
                  // 在 ViewHolder 被销毁或复用时进行资源清理
                  TextView textView = (TextView) viewHolder.view;
                  textView.setOnClickListener(null); // 移除任何可能存在的点击监听器
              }
          }
      }
      
    • 启动类

      import android.os.Bundle;
      import androidx.fragment.app.FragmentActivity;
      import androidx.fragment.app.FragmentTransaction;
      
      public class MainActivity extends FragmentActivity {
      
          @Override
          protected void onCreate(Bundle savedInstanceState) {
              super.onCreate(savedInstanceState);
              setContentView(R.layout.activity_main); // 设置活动布局文件
      
              if (savedInstanceState == null) {
                  // 如果没有已保存的实例状态,动态加载 MyBrowseFragment
                  FragmentTransaction transaction = getSupportFragmentManager().beginTransaction();
                  transaction.replace(R.id.fragment_container, new MyBrowseFragment()); // 替换容器中的 Fragment
                  transaction.commit(); // 提交事务,完成 Fragment 的替换
              }
          }
      }
      

标签:Adapter,Movie,适配器,new,ArrayObjectAdapter,import,public,TextView
From: https://www.cnblogs.com/ajunjava/p/18339061

相关文章

  • Android开发 - (适配器)Adapter类中FragmentPagerAdapter实现类详细解析
    简介用于ViewPager,与Fragment一起使用,适合少量静态页面具体作用FragmentPagerAdapter专用于在ViewPager中管理和显示Fragment。它允许你在滑动视图(ViewPager)中实现分页功能,每个页面都是一个Fragment。FragmentPagerAdapter适用于需要管理少量Fragment的场景,因为......
  • Android开发 - (适配器)Adapter类中RecyclerView.Adapter实现类详细解析
    简介RecyclerView的基础适配器,用于绑定数据和创建视图持有者具体作用RecyclerView.Adapter是Android中RecyclerView的适配器基类,负责将数据绑定到RecyclerView的子项视图上。它是RecyclerView的核心组件之一,用于处理数据集和视图之间的映射。具体来说,RecyclerVie......
  • 适配器模式
    适配器模式(AdapterPattern)将某个类的接口转换成客户端期望的另一个接口表示,主要目的是兼容性,让原本因接口不匹配不能一起工作的两个类可以协同工作适配器继承适配对象,并实现适配目标所有的方法 国标接口(适配目标)publicinterfaceNationalStandard{voiduse()......
  • Android开发 - (适配器)Adapter类中SimpleAdapter实现类详细解析
    具体作用SimpleAdapter的主要作用是简化将数据源(如List<Map<String,Object>>)绑定到视图组件(如TextView、ImageView等)的过程。它可以根据指定的键将数据映射到指定的视图组件上,从而快速实现数据的展示参数、方法解析SimpleAdapter(Contextcontext,List<?extendsMap......
  • Android开发 - (适配器)Adapter类中BaseAdapter实现类详细解析
    具体作用BaseAdapter是Android开发中一个非常重要的Adapter(适配器)基类。它提供了创建自定义适配器的基本实现,使开发者可以根据具体需求创建适用于不同视图(如ListView、GridView)的数据适配器。以下是BaseAdapter的主要作用:提供基本接口实现BaseAdapter实现了ListAd......
  • 设计模式-适配器模式( Adapter Pattern)
    设计模式-适配器模式(AdapterPattern)  概要   记忆关键词:转换,兼容接口  定义:将一个类的接口转换成客户希望的另外一个接口,适配器模式使得原本由于接口不兼容而不能一起工作的那些类可以一起工作。  分析:在适配器模式中,Cilent调用Adapter以获得相应功能,Adapter扩......
  • Android开发 - (适配器)Adapter类中CursorAdapter实现类详细解析
    作用将Cursor对象中的数据与AdapterView组件(如ListView、GridView等)进行绑定。以下是CursorAdapter的主要作用:1.数据源绑定数据源连接:CursorAdapter通过Cursor对象作为数据源,实现了从数据库或其他数据源(如ContentResolver查询结果)中读取数据的功能。这使得开发者能够轻松地......
  • Android开发 - (适配器)Adapter类中ArrayAdapter实现类详细解析
    作用将数组数据映射到UI组件(如ListView、Spinner等)上的角色。它是BaseAdapter的一个子类,专门用于处理简单的数据集合,如数组或列表。ArrayAdapter简化了数据到视图映射的过程,使得开发者能够以更少的代码实现数据的展示。它的主要作用为以下几点:数据绑定:它能够将一组数据......
  • 设计模式:代理、装饰和适配器模式的区别
    结构对比讲实话,博主当初学习完整设计模式时,这三种设计模式单独摘哪一种都是十分清晰和明确的,但是随着模式种类的增加,在实际使用的时候竟然会出现恍惚,例如读开源代码时,遇到不以模式命名规范的代码时,一时难以说清具体是使用的这三种里的哪一种。之所以会出现混淆的原因是,三种模式......
  • ComfyUI插件:IPAdapter_plus(新版)节点
    ComfyUI插件:IPAdapter_plus(新版)节点前言:学习ComfyUI是一场持久战,而IPAdapter_plus是常用且便捷有效的风格迁移模型,可以通过提供参考图像去进行图像的生成,比如风格迁移,风格融合,人物脸部模拟等各种工作,请大家重点关注本篇内容,深刻理解节点用法!!祝大家学习顺利,早日成为ComfyUI的高手......