高級控件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;
}
}