创新实训博客(7)——Kotlin的Fragment、Handler、ListView和Adapter配置使用
Fragment管理
碎片是Android中一个非常重要的部分,我这里的想法是在一个Activity中规定某一个区域,这里可以按照需要显示不同的内容,而Fragment就能很好的实现这个需求。
创建fragment的layout文件和class文件
onCreateView函数,我没有进行修改。
onActivityCreated函数,在这里我是因为要与List进行交互等等操作,因此把操作写在这里。
[code]override fun onActivityCreated(savedInstanceState: Bundle?) { super.onActivityCreated(savedInstanceState) fetchData() mAdapter = ArticleItemAdapter(list, activity) }
Activity中管理Fragment,首先是初始化
[code]fun managerFragment() { val transaction = supportFragmentManager.beginTransaction() transaction.add(R.id.fragment_layout, indexFragment) transaction.add(R.id.fragment_layout, blogFragment) transaction.add(R.id.fragment_layout, userFragment) hideFragment(transaction) transaction.show(indexFragment) transaction.commit() }
然后是根据对应的情况进行切换,使用transaction.show函数。
Bundle进行传值
如果要在Activity和他里面的Fragment之间进行参数传递,需要使用到Bundle。
首先新建bundle对象,并使用put设置参数。
[code]val bundle = Bundle() bundle.putString("token",getToken())
然后使用arguments赋值,让fragment的arguments是前面有参数的bundle对象。
[code]indexFragment.arguments = bundle
在fragment那边,就获取arguments然后得到对应的内容了。
ListItem类对象
初始化一个类对象,然后设置对应的参数。
[code]class ArticleItem constructor(id: Int) { var id = 0 init { this.id = id } }
ListItem的Adapter
两个变量:存放item的列表,上下文。
主要是重写getView函数,具体的操作就是首先获取某个组件,然后进行赋值。
[code]@Override public View getView(int position, View convertView, ViewGroup parent) { convertView = LayoutInflater.from(mContext).inflate(R.layout.item_article, parent, false); // 获取组件 TextView article_author = (TextView) convertView.findViewById(R.id.item_article_author_name); // 设置组件内容 article_author.setText(mData.get(position).getAuthor()); return convertView; }
在Fragment中设置List
需要一个list和一个adapter即可。
list存放数据,adapter用来做对应的点击监听。
遇到的问题(1)——Adapter空指针问题
具体的原因是因为我只是初始化了adapter,但是后期没有进行更新。
我发现这个组件并不能个根据内容的调整而动态的更新,需要手动重新设置。
所以,在添加ListView中的item之前,更新一下adapter的状态。
[code]fun setAdapter() { mAdapter = ArticleItemAdapter(list, activity) val listView = activity!!.findViewById<ListView>(R.id.index_blog_list) listView.adapter = mAdapter listView.setOnItemClickListener(this) }
遇到的问题(2)——View的操作问题
只有original的线程可以操作view组件。
我这里的解决方案是使用Handler。
[code] object : Handler() { override fun handleMessage(msg: Message) { super.handleMessage(msg) if (msg.what == 200) { setList() } } }
相当于接收消息的时候,开一个新的线程,根据具体的msg的值执行相应的操作。
在我这里当接收到消息200的时候,就会执行对应的操作。
发消息的步骤:
[code]val message = Message() message.what = 200 handler.sendMessage(message)
- 创新实训博客(17)——Android开发中ListView高度自适应以及组件进阶使用
- ListFragment 使用ListView and 自定义Adapter(转载)
- 创新实训博客(15)——Android开发中Kotlin与后端的接口交互
- kotlin笔记,在Fragment中使用RecyclerView的时候报No adapter attached; skipping layout
- ListFragment 使用ListView and 自定义Adapter
- 创新实训博客(12)——App端界面设计(首页Fragment部分)
- ListFragment 使用ListView and 自定义Adapter
- ListFragment使用ListView和自定义Adapter
- ListFragment 使用ListView and 自定义Adapter
- Kotlin使用(fragment的切换与listview、recyclerView的使用)
- 创新实训博客(21)——Vue中使用ECharts进行数据可视化(进阶部分)
- 创新实训博客(20)——Vue中使用ECharts进行数据可视化(基本图表部分)
- 创新实训博客(43)——爬取任务管理界面修改配置
- listview在fragment中 使用adapter时getView 不执行的解决方案
- kotlin如何使用FragmentPagerAdapter
- Android中万能的BaseAdapter(Spinner,ListView,GridView)的使用!
- Android高手进阶教程(十五)---Android中万能的BaseAdapter(Spinner,ListView,GridView)的使用!
- Android ListView入门知识--各种Adapter配合使用
- ListView与Adapter使用要点
- 使用IConfigurationSectionHandler在web.config中增加自定义配置