Listview优化
ListView 控件可使用四种不同视图显示项目。通过此控件,可将项目组成带有或不带有列标头的列,并显示伴随的图标和文本。 可使用 ListView 控件将称作 ListItem 对象的列表条目组织成下列四种不同的视图之一:1.大(标准)图标2.小图标3.列表4.报表 View 属性决定在列表中控件使用何种视图显示项目。还可用 LabelWrap 属性控制列表中与项目关联的标签是否可换行显示。另外,还可管理列表中项目的排序方法和选定项目的外观。代码如下
import android.support.v7.app.AppCompatActivity;
import android.os.Bundle;
import android.util.Log;
import android.view.View;
import android.view.ViewGroup;
import android.widget.AdapterView;
import android.widget.BaseAdapter;
import android.widget.Button;
import android.widget.ImageView;
import android.widget.ListView;
import android.widget.SimpleAdapter;
import android.widget.TextView;
import android.widget.Toast;
import java.util.ArrayList;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
public class MainActivity extends AppCompatActivity {
private ListView lv_main_list;
private int images[]={R.drawable.bird,R.drawable.cat,R.drawable.chicken,R.drawable.cow,R.drawable.dog};
private String titles[]={"雷天使","Tom猫","KFC","老黑牛","单身狗"};
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
lv_main_list = (ListView) findViewById(R.id.lv_main_list);
// List<Map<String,Object>> list=new ArrayList<>();
// for (int i = 0; i < images.length; i++) {
// Map<String,Object> map=new HashMap<>();
// map.put("image",images[i]);
// map.put("title",titles[i]);
// list.add(map);
// }
//实例化SimpleAdapter
//SimpleAdapter adapter=new SimpleAdapter(this,list,R.layout.item_listview,new String[]{"image","title"},new int[]{R.id.iv_item_listview_icon,R.id.tv_item_listview_title});
lv_main_list.setAdapter(new MyAdapter());
//给ListView设置点击事件
lv_main_list.setOnItemClickListener(new AdapterView.OnItemClickListener() {
@Override
public void onItemClick(AdapterView<?> adapterView, View view, int i, long l) {
Toast.makeText(MainActivity.this, "跳转到"+titles[i%titles.length]+"页面", Toast.LENGTH_SHORT).show();
}
});
}
//OOM OutOfMemory 内存溢出
class MyAdapter extends BaseAdapter{
@Override
public int getCount() {
return 100;
}
@Override
public Object getItem(int i) {
return titles[i%titles.length];
}
@Override
public long getItemId(int i) {
return i;
}
@Override
public View getView(final int i, View view, ViewGroup viewGroup) {
Log.i("test","i="+i+" "+view);
//把布局文件转成View
if(view==null){
view= getLayoutInflater().inflate(R.layout.item_listview,null);
ItemTag itemTag=new ItemTag();
itemTag.imageView= (ImageView) view.findViewById(R.id.iv_item_listview_icon);
itemTag.textView= (TextView) view.findViewById(R.id.tv_item_listview_title);
itemTag.button= (Button) view.findViewById(R.id.btn_item_listview_download);
view.setTag(itemTag);
}
ItemTag itemtag= (ItemTag) view.getTag();
//设值
itemtag.imageView.setImageResource(images[i%titles.length]);
itemtag.textView.setText(titles[i%titles.length]+i);
//给按钮设置点击事件
itemtag.button.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View view) {
Toast.makeText(MainActivity.this, "正在下载"+titles[i%titles.length], Toast.LENGTH_SHORT).show();
}
});
return view;
}
}
}
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:orientation="horizontal" android:layout_width="match_parent"
android:layout_height="match_parent"
android:descendantFocusability="blocksDescendants"
>
<ImageView
android:layout_width="50dp"
android:layout_height="50dp"
android:id="@+id/iv_item_listview_icon"
android:src="@drawable/bird"
/>
<TextView
android:layout_width="0dp"
android:layout_height="wrap_content"
android:layout_weight="1"
android:id="@+id/tv_item_listview_title"
android:text="XX"
android:textSize="30sp"
/>
<Button
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="下载"
android:id="@+id/btn_item_listview_download"
/>
</LinearLayout>
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout
xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:app="http://schemas.android.com/apk/res-auto"
xmlns:tools="http://schemas.android.com/tools" android:layout_width="match_parent"
android:layout_height="match_parent" tools:context="zking.com.android_8.MainActivity">
<ListView
android:layout_width="match_parent"
android:layout_height="match_parent"
android:id="@+id/lv_main_list"
></ListView>
</LinearLayout>
效果如下