Android自定义适配器 (BaseAdapter)及优化
注:本次内容是模拟一个游戏下载的UI
运行结果如下:
首先新建一个XML 内容如下
<ListView android:id="@+id/lv_main_view" android:layout_width="match_parent" android:layout_height="wrap_content"> </ListView>
在新建一个XML内容如下
<--图片-->
<ImageView android:layout_width="wrap_content" android:layout_height="wrap_content" android:id="@+id/image_item_iv"/>
<--文本--> <TextView android:layout_width="match_parent" android:layout_height="wrap_content" android:layout_weight="1" android:id="@+id/text_item_tv"/>
<--按钮--> <Button android:id="@+id/button_item_but" android:layout_width="wrap_content" android:layout_height="wrap_content" android:text="下载"/>
//此java类用于优化
public class entity { public ImageView iv; public Button bu; public TextView tv; }
新建一个Java类
//图片id
int image[]={R.drawable.bird,R.drawable.cat,R.drawable.dog,R.drawable.fox,R.drawable.cow}; String data[]={"鸟人","Tomcat","单身狗","狐狸精","大黑牛"}; private ListView lv; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); lv = (ListView) findViewById(R.id.lv_main_view);
lv.setAdapter(new AdapterDiy());
//点击事件 lv.setOnItemClickListener(new AdapterView.OnItemClickListener() { @Override public void onItemClick(AdapterView<?> parent, View view, int position, long id) { Toast.makeText(MainActivity.this, "进入"+data[position%data.length], Toast.LENGTH_SHORT).show(); } }); }
//自定义适配器 重写BaseAdapter的方法 最主要的方法 getCount 和 getView class AdapterDiy extends BaseAdapter{
//假设有10000条数据 并且要求每循环5次数据相同 @Override public int getCount() { return 10000; } @Override public Object getItem(int position) { return data[position%data.length]; } @Override public long getItemId(int position) { return position; } @Override public View getView(final int position, View view, ViewGroup parent) {
//注:代码中 position%data.length 是去余数
//布局文件转成View if(view==null){ view=LayoutInflater.from(getApplicationContext()).inflate(R.layout.activity_item,null); //实例化entity类 调用entity的方法
entity en=new entity();
//赋值
en.iv= (ImageView) view.findViewById(R.id.image_item_iv); en.tv=(TextView)view.findViewById(R.id.text_item_tv); en.bu=(Button) view.findViewById(R.id.button_item_but); view.setTag(en); } entity en= (entity) view.getTag();
en.iv.setImageResource(image[position%data.length]); en.tv.setText(data[position%data.length]);
//点击事件 en.bu.setOnClickListener(new View.OnClickListener() { @Override public void onClick(View v) { Toast.makeText(MainActivity.this,"正在下载"+data[position%data.length], Toast.LENGTH_SHORT).show(); } }); return view; } }