先来介绍一下ListView这么个东西,适合用在一排数据的展示中,
例如,这样的一个就是使用了List View这么一个控件实现功能
实现的思路主要是这样
在布局里面加一个ListView像是这样,以下代码是常用的他的一些方法
<ListView android:id="@+id/lv" //加一个id号 android:layout_width="match_parent" //设置宽度高度 android:fastScrollEnabled="true" //实现一个下滑块,方便一下到底 android:layout_height="match_parent"></ListView>
然后在MainActivity中找到这个控件,然后为他增加一个适配器。
适配器我们最先介绍一个叫做BaseAdapter的适配器,这个比较洋气
比较好用,
实现的效果是上面的那一个图
package com.example.xialm.list_test2; import android.support.v7.app.AppCompatActivity; import android.os.Bundle; import android.view.View; import android.view.ViewGroup; import android.widget.BaseAdapter; import android.widget.ListView; import android.widget.TextView; public class MainActivity extends AppCompatActivity { @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); ListView ll = (ListView)findViewById(R.id.lv); //设置适配器 ll.setAdapter(new myad()); } //开始编写适配器 public class myad extends BaseAdapter{
//下面是Base Adapter的四个构造方法, @Override public int getCount() { //实现几个条目的显示 return 100000; } @Override public Object getItem(int position) { return null; } @Override public long getItemId(int position) { return 0; } @Override public View getView(int position, View convertView, ViewGroup parent) { TextView tv; if(convertView == null){ //创建新的缓存对象 tv = new TextView(MainActivity.this); }else{ //复用新的缓存对象 tv = (TextView)convertView; } int s = position+1; tv.setText("你好,你是第"+s+"个世界"); return tv; } } }
既可实现,
那么我们可以看到这个有点low,向我们手机上那种洋气一点的布局是怎么做的呢,最起码得实现一个这样的布局把
如下:
这个好像还可以接受一波,那么我们现在的数据是我们自己造的,我们在后面会提到
如何从其他的地方拿到我们需要的东西然后再放到我们的LIst View上面来显示,
所以先来搞上面的那个界面,
有第一个案例来说,我们可以发现要做出这样的案例,只需要改动我们Adapter里面的一个
叫做getView 这个方法就可以了,
也就是我们要改动的是这一块
@Override public View getView(int position, View convertView, ViewGroup parent) { TextView tv; if(convertView == null){ //创建新的缓存对象 tv = new TextView(MainActivity.this); }else{ //复用新的缓存对象 tv = (TextView)convertView; } int s = position+1; tv.setText("你好,你是第"+s+"个世界"); return tv; }
整体的框架我们不需要改动,尤其是if 和 else这一段逻辑
解释一下这一段逻辑是用来实现将我们的程序内存最大的优化
是我们的app的运行更加流畅,使资源不会因为还没有释放之前,
就内存溢出了
那么我们改动哪一块呢,
应该是textview那一快
看上去这样只能显示一行的内容,我们现在想要在左边显示一个图片,
在右边显示两个文本框框,这个明显涉及到了布局
我们再回首看我们的代码的时候发现,我们代码中写的我们只能显示view
当然TextView是View的一种啦
那么顺理成章的,现在可以将目光和思路引导到我们实现 将布局文件转换为 view的伟大道路上
Android底层的工程师为我们创建了这么一个api正好是可以进行实现我们的功能
江湖人称,打气筒,
总结一下,一切思路和上面第一个案例一样,
我们只需要改变Adapter中第四个构造方法中的view
想实现那个就必须要将layout文件转换为view,我们引进了一个技术叫做打气筒
下面是代码
xml