在fragment中引用ListView
前言:前段时间想在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相关推荐
- 在Fragment中使用Listview
Fragment中使用ListView 刚接触Fragment,然后再用到ListView的时候真的是遇到了各种问题,原来Fragment中使用ListView和在Activity中在细节上有很多不同 ...
- 如何在fragment中添加ListView,并设置ListView中条目的值
最后界面如下: 制作思路:首先在一个Activity中做出左右fragment(碎片的意思),然后再在左边的fragment中加入ListView控件,再用编程的方法给ListView控件设置条目,即 ...
- Fragment中使用listview
按照步骤来就可以达到效果: 1-新建一个listview.xml 是listview中每个items的样式 <?xml version="1.0" encoding=&quo ...
- 如何在Fragment中使用findViewById
findViewById方法却只能被用在Activity类中,如果想在fragment中使用, 需要在findViewById前面 添加getView(); 下面是一段代码, public class ...
- Fragment 中使用 getLayoutInflater() 的问题
问题: 我想在一个Fragment的ListView中显示我的搜索结果 但在这里报错: LayoutInflater inflater = getLayoutInflater(); "The ...
- android fragment 抽屉,android – 更改Fragment中的导航抽屉项目
我有一个MainActivity启动导航抽屉. 也有一些碎片. 我需要从片段内部更改导航抽屉列表的标题. 我尝试了这个内部片段: navMenuTitles = getActivity().getRe ...
- 无需SherlockActionbar的SlidingMenu使用详解(二)——向Fragment中添加ViewPager和Tab
之前我们对大体框架有了一定的认识,现在我们来做Fragment界面,其实这里面和这个框架的关系就不大了,但因为有些同学对于在SlidingMenu中切换fragment还是有问题,所以我就在本篇进行详 ...
- Fragment中设置监听返回键的功能
首先创建一个抽象类BackHandledFragment,该类有一个抽象方法onBackPressed(),所有BackHandledFragment的子类在onBackPressed方法中处理各自对 ...
- Android studio 微信APP之Fragment中使用ReclerView
Android studio 微信APP之Fragment中使用ReclerView 如题,本次实验的内容就是在已经创建好的微信程序的首页处,在fragment控件中增加ReclerView控件,实现 ...
最新文章
- Andorid App内部跟随熊语言改变
- oracle的pdb,oracle pdb基本管理
- 个人作业7 第一阶段SCRUM冲刺(七)
- 新手学Python推荐的四本书籍+2个资源网站
- java 井字棋 人机_井字游戏 人机对战 java实现
- 手把手教你如何安装Mac OS X 图文详细教程
- 【Win10安装字体+免费字体库】Windows10安装新字体教程,免费在线字体库推荐
- JTAG Bypass命令案例解析
- Ubuntu Linux DNS服务器 BIND9配置文件命令介绍
- Android下磁盘分区表损坏,分区表损坏或者丢失,硬盘数据也照样能找回
- Multi-modal Knowledge Graphs for Recommender Systems论文解读
- 教孩子学编程 python语言版_教孩子学编程 PYTHON语言版 PDF_IT教程网
- 1.2.1 数据库系统特点
- 【OpenGL】查看显卡对OpenGL的支持程度
- 初学者制作VMOS场效应管小功放
- 论文阅读--利用完全卷积和空间变换网络从部分二维观测中产生三维超声
- 苹果开发者谈APP store现状:二八效应严重 人员浮躁
- [Simulink] 基于模型的测试与验证学习笔记_Step 4:Testing By Simulation
- 子网划分和计算方法(附习题详解)
- 我是一只IT小小鸟读后感 Part 1