ListView實現(xiàn)步驟:
1、初始化ListView
2、實現(xiàn)展示數(shù)據(jù)Item
3、實現(xiàn)ItemAdapter 繼承自ArrayAdapter
4、實現(xiàn)自定義item界面 layout
5、關聯(lián) listView - ItemAdapter - listData
具體代碼:
1、初始化ListView
<ListView
android:id="@+id/listview"
android:layout_width="match_parent"
android:layout_height="match_parent">
</ListView>
2、實現(xiàn)展示數(shù)據(jù)Item
public class Item {
private String name;
private int imgId;
public Item(String name,int id){
this.name = name;
this.imgId = id;
}
public String getName(){
return name;
}
public int getImgId(){
return imgId;
}
}
3、實現(xiàn)ItemAdapter 繼承自ArrayAdapter
public class ItemAdapter extends ArrayAdapter<Item> {
private int layoutId;
public ItemAdapter(Context context, int layoutId, List<Item> list){
super(context,layoutId,list);
this.layoutId = layoutId;
}
@NonNull
@Override
public View getView(int position, View convertView, ViewGroup parent){
Item item = getItem(position);
View view = LayoutInflater.from(getContext()).inflate(layoutId,parent,false);
ImageView imageView = (ImageView)view.findViewById(R.id.item_img);
TextView textView = (TextView) view.findViewById(R.id.item_text);
imageView.setImageResource(item.getImgId());
textView.setText(item.getName());
return view;
}
}
4、實現(xiàn)自定義item界面 layout
<?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">
<ImageView
android:id="@+id/item_img"
android:layout_width="wrap_content"
android:layout_height="match_parent" />
<TextView
android:id="@+id/item_text"
android:layout_width="wrap_content"
android:layout_height="match_parent"
android:layout_gravity="center_vertical"
android:layout_marginRight="10dp"
/>
</LinearLayout>
5、關聯(lián) listView -listItem- ItemAdapter - listData
private List<Item> list = new ArrayList <Item>();
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
initList();
ItemAdapter itemAdapter = new ItemAdapter(MainActivity.this,R.layout.linear_item_layout,list);
ListView listView = (ListView)findViewById(R.id.listview);
listView.setAdapter(itemAdapter);
}
private void initList(){
for (int i = 0; i <100 ; i++) {
Item item = new Item("Item" + i,R.mipmap.ic_launcher);
list.add(item);
}
}
問題點備注:
- 自定義ItemAdapter繼承ArrayAdapter,需要實現(xiàn)構造方法和getView
2、getView中LayoutInflater和inflate
實際開發(fā)中LayoutInflater它的作用類似于findViewById()。不同點是LayoutInflater是用來找res/layout/下的xml布局文件,并且實例化;而findViewById()是找xml布局文件下的具體widget控件(如 Button、TextView等)。
具體作用:
2.1、對于一個沒有被載入或者想要動態(tài)載入的界面,都需要使用LayoutInflater.inflate()來載入;
2.2、對于一個已經(jīng)載入的界面,就可以使用Activiyt.findViewById()方法來獲得其中的界面元素。
LayoutInflater 是一個抽象類, 獲得 LayoutInflater 實例的三種方式:
- LayoutInflater inflater = getLayoutInflater(); //調用Activity的getLayoutInflater()
- LayoutInflater localinflater =(LayoutInflater)context.getSystemService(Context.LAYOUT_INFLATER_SERVICE);
- LayoutInflater inflater = LayoutInflater.from(context);
2.3 、inflate 方法
通過 sdk 的 api 文檔,可以知道該方法有以下幾種過載形式,返回值均是 View 對象,如下:
public View inflate (int resource, ViewGroup root)
public View inflate (XmlPullParser parser, ViewGroup root)
public View inflate (XmlPullParser parser, ViewGroup root, boolean attachToRoot)
public View inflate (int resource, ViewGroup root, boolean attachToRoot)
1:
public View inflate (int resource, ViewGroup root)
reSource:View的layout的ID
root:如果為null,則將此View作為根,此時既可以應用此View中的其他控件了。
如果!null, 則將默認的layout作為View的根。
2:
public View inflate ( XmlPullParser parser, ViewGroup root)
parser:你需要解析xml的解析接口
root:如果null,則將此View作為根,此時既可以應用此View中的其他控件了。
如果!null, 則將默認的layout作為View的根。
3:
public View inflate ( XmlPullParser parser, ViewGroup root, boolean attachToRoot)
parser:你需要解析View的xml的解析接口
root:如果null,則將此View作為根,此時既可以應用此View中的其他控件了。
如果!null, 則將默認的layout作為View的根。
attachToRoot:
ture:也就將此解析的xml作為View根
fase:則為默認的xml,做為根視圖View
4:
public View inflate (int resource, ViewGroup root, boolean attachToRoot)
resource:View的layout的ID
root:如果null,則將此View作為根,此時既可以應用此View中的其他控件了。
如果!null, 則將默認的layout作為View的根。
attachToRoot:
ture:也就將此解析的xml作為View根
fase:則為默認的xml,做為根視圖View
更深層次的目前還理解不到。
參考文檔:https://blog.csdn.net/robertcpp/article/details/51523218