前言:前段时间想在fragment中做出一个ListView列表,不过一直都是UI的闪退,让我一直不知道怎么办,很是苦恼,不过后来才发现了一个新的东西叫做ListFragment,所以这次主要是讲一下如何使用ListFragment建立一个简单的列表

首先需要新建一个fragment引用ListFragment,以及这个fragment的布局文件,这个布局用于容纳由adapter适配好的view,叫做fragment_main.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" ><!-- ListFragment对应的android:id值固定为"@id/android:list" --><ListViewandroid:id="@id/android:list"android:layout_width="match_parent"android:layout_height="match_parent"android:drawSelectorOnTop="false"/></LinearLayout>

新建一个list_main.xml结合adapter适配每一个view

<?xml version="1.0" encoding="utf-8"?>
<LinearLayoutxmlns:android="http://schemas.android.com/apk/res/android"android:layout_width="match_parent"android:layout_height="match_parent"android:layout_margin="16dp"><TextViewandroid:id="@+id/list_food"android:layout_width="match_parent"android:layout_height="wrap_content" /></LinearLayout>

好现在我们就开始编辑java代码,首先新建一个简单的一个Food类

public class Food {private String mName;public Food(String name){mName = name;}public String getName() {return mName;}public void setName(String name) {mName = name;}
}

然后开始新建ArrayListAdapter继承ArrayAdapter,这里面需要重写一个getView方法

不过在重写之前,现解决这个有一个必须重写的方法,并用一个int来存储一下这个资源文件,这里引用的是一个XML文件,需要后面的fragment传入这个数据,现在我们先在这里做接收

重写

private int resourceId;
public ListMainAdapter(@NonNull Context context, int resource, @NonNull List objects) {super(context, resource, objects);
    resourceId = resource;
}

然后就是重写getView方法,这里我就不写了,直接列出所有的代码

public class ListMainAdapter extends ArrayAdapter<Food> {private int resourceId;public ListMainAdapter(@NonNull Context context, int resource, @NonNull List<Food> objects) {super(context, resource, objects);resourceId = resource;}@NonNull@Overridepublic View getView(int position, @Nullable View convertView, @NonNull ViewGroup parent) {Food food = getItem(position);//获取food对象View view = LayoutInflater.from(getContext()).inflate(resourceId,null);TextView textView = view.findViewById(R.id.list_food);textView.setText(food.getName());return view;}
}
 

下面需要做的就是MainFragment.java的书写,感觉还是很容易看懂的,主要就是重写两个方法就好。

 
public class MainFragment extends ListFragment {List<Food> mFoodList;@Overridepublic void onCreate(@Nullable Bundle savedInstanceState) {super.onCreate(savedInstanceState);mFoodList = new ArrayList<>();initFood();ListMainAdapter adapter = new ListMainAdapter(getContext(),R.layout.list_main,mFoodList);this.setListAdapter(adapter);}@Overridepublic View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) {return inflater.inflate(R.layout.fragment_main,container,false);}private void initFood(){mFoodList.add(new Food("apple"));mFoodList.add(new Food("banana"));mFoodList.add(new Food("hot"));}
}
 

最后的最后就是写MainActivity的文件了以及activity_main.xml

public class MainActivity extends AppCompatActivity {MainFragment mMainFragment;@Overrideprotected void onCreate(Bundle savedInstanceState) {super.onCreate(savedInstanceState);setContentView(R.layout.activity_main);mMainFragment = new MainFragment();getSupportFragmentManager().beginTransaction().add(R.id.main_container,mMainFragment).commit();}}
 
 
 
<?xml version="1.0" encoding="utf-8"?> <FrameLayout xmlns:android="http://schemas.android.com/apk/res/android"  android:id="@+id/main_container"  android:layout_width="match_parent"  android:layout_height="match_parent"> </FrameLayout> 

大概过程就是这样,可能一些表达不是很准确,以后会慢慢更改完善,不过代码一些部分写的比较简单,没有经过优化,但优化上面和一般的差不多,这里就不过多写了,如果不能看懂哪里可以留言一下,列表这方面还是比较推荐recycleview,大家可以去了解一些,欢迎交流

在fragment中引用ListView相关推荐

  1. 在Fragment中使用Listview

    Fragment中使用ListView 刚接触Fragment,然后再用到ListView的时候真的是遇到了各种问题,原来Fragment中使用ListView和在Activity中在细节上有很多不同 ...

  2. 如何在fragment中添加ListView,并设置ListView中条目的值

    最后界面如下: 制作思路:首先在一个Activity中做出左右fragment(碎片的意思),然后再在左边的fragment中加入ListView控件,再用编程的方法给ListView控件设置条目,即 ...

  3. Fragment中使用listview

    按照步骤来就可以达到效果: 1-新建一个listview.xml 是listview中每个items的样式 <?xml version="1.0" encoding=&quo ...

  4. 如何在Fragment中使用findViewById

    findViewById方法却只能被用在Activity类中,如果想在fragment中使用, 需要在findViewById前面 添加getView(); 下面是一段代码, public class ...

  5. Fragment 中使用 getLayoutInflater() 的问题

    问题: 我想在一个Fragment的ListView中显示我的搜索结果 但在这里报错: LayoutInflater inflater = getLayoutInflater(); "The ...

  6. android fragment 抽屉,android – 更改Fragment中的导航抽屉项目

    我有一个MainActivity启动导航抽屉. 也有一些碎片. 我需要从片段内部更改导航抽屉列表的标题. 我尝试了这个内部片段: navMenuTitles = getActivity().getRe ...

  7. 无需SherlockActionbar的SlidingMenu使用详解(二)——向Fragment中添加ViewPager和Tab

    之前我们对大体框架有了一定的认识,现在我们来做Fragment界面,其实这里面和这个框架的关系就不大了,但因为有些同学对于在SlidingMenu中切换fragment还是有问题,所以我就在本篇进行详 ...

  8. Fragment中设置监听返回键的功能

    首先创建一个抽象类BackHandledFragment,该类有一个抽象方法onBackPressed(),所有BackHandledFragment的子类在onBackPressed方法中处理各自对 ...

  9. Android studio 微信APP之Fragment中使用ReclerView

    Android studio 微信APP之Fragment中使用ReclerView 如题,本次实验的内容就是在已经创建好的微信程序的首页处,在fragment控件中增加ReclerView控件,实现 ...

最新文章

  1. Andorid App内部跟随熊语言改变
  2. oracle的pdb,oracle pdb基本管理
  3. 个人作业7 第一阶段SCRUM冲刺(七)
  4. 新手学Python推荐的四本书籍+2个资源网站
  5. java 井字棋 人机_井字游戏 人机对战 java实现
  6. 手把手教你如何安装Mac OS X 图文详细教程
  7. 【Win10安装字体+免费字体库】Windows10安装新字体教程,免费在线字体库推荐
  8. JTAG Bypass命令案例解析
  9. Ubuntu Linux DNS服务器 BIND9配置文件命令介绍
  10. Android下磁盘分区表损坏,分区表损坏或者丢失,硬盘数据也照样能找回
  11. Multi-modal Knowledge Graphs for Recommender Systems论文解读
  12. 教孩子学编程 python语言版_教孩子学编程 PYTHON语言版 PDF_IT教程网
  13. 1.2.1 数据库系统特点
  14. 【OpenGL】查看显卡对OpenGL的支持程度
  15. 初学者制作VMOS场效应管小功放
  16. 论文阅读--利用完全卷积和空间变换网络从部分二维观测中产生三维超声
  17. 苹果开发者谈APP store现状:二八效应严重 人员浮躁
  18. [Simulink] 基于模型的测试与验证学习笔记_Step 4:Testing By Simulation
  19. 子网划分和计算方法(附习题详解)
  20. 我是一只IT小小鸟读后感 Part 1

热门文章

  1. java 指针定义_JAVA与指针
  2. 盘企lcms php开发框架,LCMS操作 · 盘企LCMS PHP开发框架文档 · 看云
  3. Android LottieAnimation使用---踩坑篇
  4. Delta Lake 在 Soul 的应用实践
  5. 重新排列句子 臃肿低效到简洁高效的算法
  6. Sawyer智能协作机器人帮助中小企业保持市场竞争力
  7. 群聊平台、发邮件、发短信
  8. Android密钥证书学习
  9. 什么是类比估算法=自上而下的估算
  10. 刘军荣电商培训——电商成长之路