Listview在安卓开发中可以说是一个非常重要的组件,具有一个界面效果,多条数据的表现。
下面介绍如何实现Listvie的适配器自定义,点击事件,填充内容。
开发使用Android Studio。
尤其强调listview的每个item一旦设置clickble=true则会导致抢占焦点,点击事件失效。
MainActivity.java
package com.zc.test;
import android.support.v7.app.AppCompatActivity;
import android.os.Bundle;
import android.util.Log;
import android.view.View;
import android.widget.AdapterView;
import android.widget.ListView;
import android.widget.Toast;
import java.util.ArrayList;
import java.util.List;
public class MainActivity extends AppCompatActivity {
private ListView lv_test;
// 这里一定要构建示例不然报错
private List<String> data = new ArrayList<>();
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
// 绑定组件
findViews();
// 初始化传入listview的数据,示例三行
data.add("数据1");
data.add("数据2");
data.add("数据3");
// 传入一个实例化的Myadapter对象,成功给予listview内容
lv_test.setAdapter(new MyBaseAdapter(MainActivity.this,data));
// 设置点击事件
lv_test.setOnItemClickListener(new AdapterView.OnItemClickListener() {
@Override
public void onItemClick(AdapterView<?> adapterView, View view, int i, long l) {
Toast.makeText(MainActivity.this,"你点击的是第"+(i+1)+"行的数据",Toast.LENGTH_SHORT).show();
}
});
}
private void findViews() {
// 绑定界面中的Listview
lv_test = (ListView) findViewById(R.id.lv_test);
lv_test.setOnItemClickListener(new AdapterView.OnItemClickListener() {
@Override
public void onItemClick(AdapterView<?> adapterView, View view, int i, long l) {
Toast.makeText(MainActivity.this,"你点击的是第"+(i+1)+"行的数据",Toast.LENGTH_SHORT).show();
Log.d("Zc","Zc");
}
});
}
}
对应布局文件:
activity_main.xml
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:tools="http://schemas.android.com/tools"
android:id="@+id/activity_main"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:paddingBottom="@dimen/activity_vertical_margin"
android:paddingLeft="@dimen/activity_horizontal_margin"
android:paddingRight="@dimen/activity_horizontal_margin"
android:paddingTop="@dimen/activity_vertical_margin"
android:orientation="vertical"
tools:context="com.zc.test.MainActivity">
<ListView
android:id="@+id/lv_test"
android:layout_width="match_parent"
android:layout_height="wrap_content"></ListView>
</LinearLayout>
item.xml
<TextView
android:gravity="center_vertical"
android:orientation="horizontal"
android:id="@+id/tv_tv"
style="@style/Bar.White.Selectable"
android:layout_centerVertical="true"
xmlns:android="http://schemas.android.com/apk/res/android" />
MyBaseAdapter.java(自己写的适配器)
package com.zc.test;
import android.content.Context;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;
import android.widget.BaseAdapter;
import android.widget.TextView;
import java.util.List;
/**
* Created by 16957 on 2018/7/28.
*/
public class MyBaseAdapter extends BaseAdapter{
private List<String> data;
private Context context;
public MyBaseAdapter(Context context, List data) {
this.data = data;
this.context = context;
}
@Override
public int getCount() {
// 该方法获得列表行数
if(data==null)
return 0;
else
return data.size();
}
@Override
public Object getItem(int i) {
return null;
}
@Override
public long getItemId(int i) {
return 0;
}
@Override
public View getView(int i, View view, ViewGroup viewGroup) {
ViewHolder viewHolder;
if(view==null){
viewHolder=new ViewHolder();
// 填充item布局
LayoutInflater inflater = LayoutInflater.from(context);
view = inflater.inflate(R.layout.item, viewGroup, false);
viewHolder.tv_test = (TextView) view.findViewById(R.id.tv_tv);
view.setTag(viewHolder);
}
else{
viewHolder = (ViewHolder) view.getTag();
}
viewHolder.tv_test.setText(data.get(i));
return view;
}
// 存放列表每行也就是每个item的组件,这里每个item自行定制,我这里只放了一个textview
class ViewHolder{
TextView tv_test;
}
}
其他自定义风格不列举。
扫描二维码关注公众号,回复:
2724891 查看本文章