首先需要listview的xml文件,并且新建一个item的布局样式。
完成以后将样式填充至listview中,然后在activity中新建数据源。基本的实现思路就是这样了,先看下效果图:
中间包含以下知识点:
①:自定义适配器
②:点击listview颜色发生变化
③:长按listview跳转界面 (intent传值 id以及name)
④:点击返回按钮提示对话框
接下来上传实现步骤代码
1:首先listview布局 list_view_layout.xml布局文件
<ListView
android:id="@+id/list_view_layout"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:listSelector="@drawable/listview_color_selector"><!--设置点击颜色-->
</ListView>
2:item布局样式,item_view_layout.xml布局文件
<?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"
android:orientation="vertical">
<LinearLayout
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:orientation="horizontal"
android:layout_marginTop="5dp"
android:layout_marginLeft="5dp"
android:layout_marginRight="5dp"
android:padding="5dp"
android:gravity="center_vertical"
android:descendantFocusability="blocksDescendants"> //抢夺焦点
<ImageView
android:id="@+id/logo"
android:layout_width="70dip"
android:layout_height="70dip"
android:src="@drawable/timg1"/>
<LinearLayout
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:orientation="vertical"
android:layout_marginLeft="5dp"
android:layout_weight="1">
<TextView
android:id="@+id/title"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="知乎网"
android:layout_marginTop="10dip"/>
<TextView
android:id="@+id/vertion"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="版本:1.0.1"
android:textSize="10sp"
android:textColor="#999"
android:layout_marginTop="6dp"/>
<TextView
android:id="@+id/size"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="大小:45M"
android:textSize="10sp"
android:textColor="#999"
android:layout_marginTop="3dp"/>
</LinearLayout>
<Button
android:layout_width="75dip"
android:layout_height="35dip"
android:background="@drawable/listview_button_selector"
android:text="下载"/>
</LinearLayout>
</LinearLayout>
3:在mainactivity中实现插入数据源,新建适配器,listview点击长按事件,退出事件。(可以使用simpleadapter本文我采用自定义适配器完成的) 代码片段都有相关的注释,就不一一解释了。
package com.yongninggo.listview;
import android.content.DialogInterface;
import android.content.Intent;
import android.os.Bundle;
import android.support.v7.app.AlertDialog;
import android.support.v7.app.AppCompatActivity;
import android.view.View;
import android.widget.AdapterView;
import android.widget.ListView;
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 implements AdapterView.OnItemClickListener, AdapterView.OnItemLongClickListener {
//声明listview,数据源和适配器
private ListView listView;
List<Map<String,Object>> list = new ArrayList<Map<String,Object>>();
Map<String,Object> map = new HashMap<String, Object>();
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.list_view_layout);
initView();
}
private void initView() {
listView = (ListView) findViewById(R.id.list_view_layout);
//添加数据源
map.put("logo",R.drawable.timg1);
map.put("title","知乎网");
map.put("vertion","版本:1.0.1");
map.put("size","大小:45M");
list.add(map);
map = new HashMap<String, Object>();
map.put("logo",R.drawable.timg2);
map.put("title","微信");
map.put("vertion","版本:1.0.1");
map.put("size","大小:45M");
list.add(map);
map = new HashMap<String, Object>();
map.put("logo",R.drawable.timg3);
map.put("title","QQ");
map.put("vertion","版本:1.0.1");
map.put("size","大小:45M");
list.add(map);
map = new HashMap<String, Object>();
map.put("logo",R.drawable.timg4);
map.put("title","微博");
map.put("vertion","版本:1.0.1");
map.put("size","大小:45M");
list.add(map);
map = new HashMap<String, Object>();
map.put("logo",R.drawable.timg5);
map.put("title","支付宝");
map.put("vertion","版本:1.0.1");
map.put("size","大小:45M");
list.add(map);
//SimpleAdapter适配器
/*SimpleAdapter simpleAdapter = new SimpleAdapter(
this,
list,
R.layout.item_view_layout,
new String[]{"logo","title","vertion","size"},
new int[]{R.id.logo,R.id.title,R.id.vertion,R.id.size}
);*/
//接入自定义适配器
Myadapter myadapter = new Myadapter(this);
myadapter.setList(list);
//将数据存放进listview中
listView.setAdapter(myadapter);
//给listview长按和点击两个事件
listView.setOnItemClickListener(this);
listView.setOnItemLongClickListener(this);
}
@Override
public void onItemClick(AdapterView<?> parent, View view, int position, long id) {
// Toast.makeText(this,"点击:" + position,Toast.LENGTH_SHORT).show();
//点击listview跳转界面
Intent intent = new Intent(this,intent_Activity.class);
intent.putExtra("index",""+position);
Map<String,Object> map = (Map<String, Object>) parent.getItemAtPosition(position);
intent.putExtra("title",""+map.get("title"));
startActivity(intent);
}
@Override
public boolean onItemLongClick(AdapterView<?> parent, View view, int position, long id) {
// Toast.makeText(this,"长按:" + position,Toast.LENGTH_SHORT).show();
//长按listview跳出对话框
final String [] arr = {"复制","删除","举报"};
AlertDialog.Builder builder = new AlertDialog.Builder(this);
builder.setIcon(R.drawable.timg1);
builder.setTitle("操作");
builder.setItems(arr, new DialogInterface.OnClickListener() {
@Override
public void onClick(DialogInterface dialog, int which) {
Toast.makeText(MainActivity.this,"您选择了:"+arr[which],Toast.LENGTH_SHORT).show();
}
});
builder.show();
return true;
}
//退出程序提示确认
@Override
public void onBackPressed() {
//super.onBackPressed();
AlertDialog.Builder builder = new AlertDialog.Builder(this);
builder.setIcon(R.drawable.timg2);
builder.setTitle("操作");
builder.setMessage("您确定退出吗?");
builder.setNegativeButton("取消",null);
builder.setPositiveButton("确定", new DialogInterface.OnClickListener() {
@Override
public void onClick(DialogInterface dialog, int which) {
finish();
}
});
builder.show();
}
}
4:点击listview进行intent传值,一个intentActivity,一个intent布局文件
public class intent_Activity extends AppCompatActivity {
@Override
protected void onCreate(@Nullable Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.intent_view_layout);
String index = getIntent().getStringExtra("index");
String title = getIntent().getStringExtra("title");
TextView info = (TextView) findViewById(R.id.intent);
info.setText("序列号:"+index+" 软件名:"+title);
}
}
intent布局文件就一个textview + id就可以了
5:接下来就是自定义一个适配器啦。继承BaseAdapter。
public class Myadapter extends BaseAdapter {
List<Map<String,Object>> list ;
LayoutInflater inflater ;
public Myadapter(Context context) {
this.inflater = LayoutInflater.from(context);
}
public void setList(List<Map<String, Object>> list) {
this.list = list;
}
@Override
public int getCount() {
return list.size();
}
@Override
public Object getItem(int position) {
return list.get(position);
}
@Override
public long getItemId(int position) {
return position;
}
@Override
public View getView(int position, View convertView, ViewGroup parent) {
viewHolder holder = null; //二级优化定义
if (convertView == null){ //listview一级优化
convertView = inflater.inflate(R.layout.item_view_layout,null);
holder = new viewHolder();
holder.logo = (ImageView) convertView.findViewById(R.id.logo);
holder.title = (TextView) convertView.findViewById(R.id.title);
holder.vertion = (TextView) convertView.findViewById(vertion);
holder.size = (TextView) convertView.findViewById(size);
convertView.setTag(holder);
} else {
holder = (viewHolder) convertView.getTag();
}
Map map = list.get(position);
holder.logo.setImageResource((Integer) map.get("logo"));
holder.title.setText((String) map.get("title"));
holder.vertion.setText((String) map.get("vertion"));
holder.size.setText((String) map.get("size"));
return convertView;
}
public class viewHolder{
ImageView logo;
TextView title;
TextView vertion;
TextView size;
}
}
目前为止,一个简单的listview就成功实现了,源码下载地址:listview的简单实现