前言:前段时间想在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. 有哪些高效看文献的方法?
  2. 从数据类型 nvarchar 转换为 bigint 时出错_JavaScript数据类型的一些细节点
  3. springmvc是如何和前端页面联系起来的
  4. linux中sz和rz的使用,在服务器和本地之间传输数据
  5. 看了数百个PPT封面,我只想告诉你这两个套路!
  6. python socket多线程 获取朋友列表_python socket多线程通讯实例分析(聊天室)
  7. MNIST数据集下载及可视化
  8. aliyun gradle 代理_gradle|gradle 配置阿里云镜像和插件镜像
  9. matlab将txt数据分类,MATLAB读取txt文件,txt里面有字符串和数值两种类型
  10. 【动态规划笔记】完全背包问题及优化
  11. mysql的varchar 和text_MySQL中char、varchar和text的区别
  12. 26. Location assign() 方法
  13. python怎样分析文献综述怎么写_如何写文献综述?
  14. 基于php+mysql的校园木本植物检索查询统
  15. 前端700行代码项目练习--小米官网(仅html、css实现)
  16. 路由中的shells / CLI
  17. JavaScript 计算星座和生肖
  18. JSEclipse——Eclipse上的JavaScript开发工具
  19. WIN10X64位提示丢失了 msvcp71.dll 文件
  20. jdk的下载/安装/配置

热门文章

  1. 【掌控板-arduino】3.1 SH1106显示图片
  2. 节点操作之创建和添加节点
  3. NumPy知识点总结1
  4. CCleaner绿色版|CCleaner绿色版下载
  5. OpenCV 图像梯度 :cv2.Sobel(),cv2.Schar(),cv2.Laplacian() + 数据类型设置:cv2.CV_8U,cv2.CV_16S,cv2.CV_64F
  6. 1.android入门不能忽视的问题之出现“ClassNotFoundException: Didn't find class ...Activity on path: DexPathLis”错误
  7. 域名解析工具_12种帮助您购买完美域名的工具
  8. 生存曲线 p值 python_超详细讲解生信SCI中的生存曲线作图,不看后悔系列
  9. 【SAP】ABAP Submit调用报表程序
  10. 视频后期合成软件:Nuke 13 for Mac(支持m1) v13.0v3激活版