社区微信群开通啦,扫一扫抢先加入社区官方微信群
社区微信群
参考 API 和《第一行代码》
ListView 用来显示一个可以垂直滚动的列表,其中列表的每一项由其相关联的适配器提供,适配器起到一个中间人的作用,即连接列表数据和ListView布局
使用默认 ListView, 先定义一个数组(ArrayList)保存要在ListView里显示的数据,然后新建一个适配器,构造函数传入系统默认的子项目布局( android.R.layout.simple_list_item_1 )–(显示一个 TextView )和数据存在的数组,再直接调用 ListView 的 setAdapter() 方法,传入新建好的适配器,即可显示数据.
使用自定义的 ListView, 可以在子项目中不只显示一个 TextView, 而是可以显示其他自己定义的布局,所以要
例 :
public class Item {
private String text;
private int button;
public Item(String text,int button){
this.text=text;
this.button=button;
}
public String getText(){
return text;
}
public int getButton(){
return button;
}
}
public class ItemAdapter extends ArrayAdapter<Item> {
private int resourceId;
public ItemAdapter(Context context,int resource,List<Item> data){
super(context,resource,data);
resourceId=resource;
}
@Override
public View getView(int position, View convertView, ViewGroup parent){
final Item item=getItem(position);
View view;
ViewHolder holder=new ViewHolder(); // viewHolder 是提升 ListView 运行效率
if(convertView==null){
view = LayoutInflater.from(getContext()).inflate(resourceId,parent,false);
holder.tv=view.findViewById(R.id.text_view);
holder.bn=view.findViewById(R.id.button);
view.setTag(holder);
} else {
view = convertView;
holder=(ViewHolder) view.getTag();
}
holder.tv.setText(item.getText());
holder.bn.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
Toast.makeText(getContext(),"you clicked button"+item.getButton(),Toast.LENGTH_SHORT).show();
}
});
return view;
}
class ViewHolder{
TextView tv;
Button bn;
}
}
public class MainActivity extends AppCompatActivity {
private ArrayList<Item> data=new ArrayList<>();
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
initData();
ItemAdapter adapter=new ItemAdapter(this,R.layout.list_view_item,data);
ListView listView=(ListView) findViewById(R.id.list_view);
listView.setAdapter(adapter);
}
private void initData(){
for(int i=0;i<20;++i){
Item a=new Item("list view test. no "+i,i);
data.add(a);
}
}
}
运行效果 :
如果觉得我的文章对您有用,请随意打赏。你的支持将鼓励我继续创作!