高级控件ListView的学习
- 对AndroidUI的学习也就是对android控件的学习。博主任务在对控件学习当中,我们不要去死记硬背!
Android中那么多的控件我们也是记不下来的,用到什么控件去搜索什么控件!
LIstView
在使用ListView之前,我们需要思考一下这个控件要用到什么地方?控件构成需要什么? 当我去跟随着这些为什么去学习的时候,我们就能找到其中的答案。
- 首先,当我们使用QQ 、微信等等的app时候,我们应该注意到我们手指上下滑动的功能吧!它就是我们所说的ListView。
- 其次,要想实现上面的功能,我们要想到,第一步:我们需要数据,第二步:我们需要ListView展示我们的数据,最后我们还需要把数据给适配上去。理解了这些,我们就可以去学习了!
1、数据
数据非常简单,我们可以通过服务器去获取数据然后进行解析,要么我们自定义数据!
public class MainActivity extends AppCompatActivity {
private ListView listView;
private ListViewAdapter adapter;
private List<String> data;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
listView=findViewById(R.id.list_view);
data=new ArrayList<>();
//获取数据
getData();
listView=findViewById(R.id.list_view);
listView.setAdapter(adapter=new ListViewAdapter(this,data));
listView.setOnItemClickListener(new AdapterView.OnItemClickListener() {
@Override
public void onItemClick(AdapterView<?> adapterView, View view, int i, long l) {
Toast.makeText(MainActivity.this,"位置"+i,Toast.LENGTH_SHORT).show();
}
});
}
//初始化数据
private void getData(){
for (int i=0;i<200;i++){
data.add("全保"+i);
}
}
}
2、ListView
ListView 和普通的Button、TextView的用法都是一样的,只需要在activity_main.xml中定义即可;我们还可以定制自己ListView。
// 首先我们定义ListView
<ListView
android:id="@+id/list_view"
android:divider="@null"
android:layout_width="match_parent"
android:layout_height="wrap_content">
</ListView>
3、适配器
适配器是有很多种的(例如:ArrayAdapter、BaseAdapter等等)根据我们的需求自己去选择。
//适配器
public class ListViewAdapter extends BaseAdapter {
private List<String> listData;
private LayoutInflater inflater;
public ListViewAdapter(Context context,List<String> listData) {
this.listData = listData;
inflater=LayoutInflater.from(context);
}
@Override
public int getCount() {
return listData.size();
}
@Override
public Object getItem(int i) {
return listData.get(i);
}
@Override
public long getItemId(int i) {
return i;
}
//获取每一行的view
@Override
public View getView(int position, View convertView, ViewGroup parent) {
ViewHolder viewHolder;
if (convertView==null){
viewHolder=new ViewHolder();
convertView=inflater.inflate(android.R.layout.simple_list_item_1,parent,false);
viewHolder.text1=convertView.findViewById(android.R.id.text1);
convertView.setTag(viewHolder);
}else {
viewHolder=(ViewHolder) convertView.getTag();
}
viewHolder.text1.setText(listData.get(position));
return convertView;
}
private class ViewHolder{
private TextView text1;
}
}