在本篇博客之前,我简单介绍过ListView的基本使用 ListView(一) ListView(二)常见属性设置,此篇主要总结一下常用的ListView的点击事件。
首先,先创建一个名为ListViewClick的项目,
在第一页使用listview展示点击事件的种类:
(1)写在ListView的点击事件
在控制器中实现:方法OnItemClickListener,
(2)写在Adapter的点击事件
在Adapter中实现方法OnItemClickListener
(3)写在item控件的点击事件
使用接口方式,重写点击
完成点击事件:(该页面可以布局三个按钮,来完成,不做文档说明,我的Demo中使用的是ListView,接下来会讲到这部分的使用)
当点击“写在ListView的点击事件”时,
跳转到新的界面,为listView。
创建一个名为ListvewclickActivity的Activity,创建Adapter名为ListvewclickAdapter,和数据模型ListvewclickBean,代码如下
ListvewclickBean:
public class ListviewclickBean {
private String title ;
public String getTitle() {
return title;
}
public void setTitle(String title) {
this.title = title;
}
}
ListvewclickAdapter:
public class ListviewclickAdapter extends BaseAdapter {
private Context context;
private List<ListviewclickBean> list;
private ListviewclickView listviewclickView;
public ListviewclickAdapter(Context context, List<ListviewclickBean> list) {
this.context = context;
this.list = list;
}
@Override
public int getCount() {
return list == null ? 0 : list.size();
}
@Override
public Object getItem(int position) {
return list == null ? 0 : position;
}
@Override
public long getItemId(int position) {
return list == null ? 0 : position;
}
@Override
public View getView(int position, View convertView, ViewGroup parent) {
listviewclickView = null;
ListviewclickBean bean = list.get(position);
if (convertView == null) {
convertView = LayoutInflater.from(context).inflate(R.layout.adapter_listviewclick,parent,false);
listviewclickView = new ListviewclickView();
listviewclickView.titleView = (TextView) convertView.findViewById(R.id.title_textview);
convertView.setTag(listviewclickView);
}else {
listviewclickView = (ListviewclickView) convertView.getTag();
}
listviewclickView.titleView.setText(bean.getTitle());
return convertView;
}
static class ListviewclickView {
private TextView titleView ;
}
}
adapter_istvewclick.xml
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:orientation="vertical" android:layout_width="match_parent"
android:layout_height="match_parent">
<TextView
android:id="@+id/title_textview"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:padding="30dp"
/>
</LinearLayout>
activity_listvewclick.xml:
<ListView
android:id="@+id/listview"
android:layout_width="match_parent"
android:layout_height="match_parent"
>
</ListView>
ListvewclickActivity:
public class ListvewclickActivity extends AppCompatActivity implements AdapterView.OnItemClickListener{
private List<ListviewclickBean> listviewclickBeens;
private ListviewclickAdapter listviewclickAdapter;
private ListView listView;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_listvewclick);
listView = (ListView) findViewById(R.id.listview);
listviewclickBeens = new ArrayList<>();
for (int i = 0 ; i < 10 ; i++ ){
ListviewclickBean bean = new ListviewclickBean();
bean.setTitle("第"+ i+ "个");
listviewclickBeens.add(bean);
}
listviewclickAdapter = new ListviewclickAdapter(this , listviewclickBeens);
listView.setAdapter(listviewclickAdapter);
listView.setOnItemClickListener(this);
//注释部分可以替代 listView.setOnItemClickListener(this);和 @Override public void onItemClick(AdapterView<?> parent, View view, int position, long id) {
// listView.setOnItemClickListener(new AdapterView.OnItemClickListener() {
// @Override
// public void onItemClick(AdapterView<?> parent, View view, int position, long id) {
// ListviewclickBean bean = listviewclickBeens.get(position);
// Log.e("flytosky","信息展示:我点击的是—— " + bean.getTitle());
// }
// });
}
@Override
public void onItemClick(AdapterView<?> parent, View view, int position, long id) {
ListviewclickBean bean = listviewclickBeens.get(position);
Log.e("flytosky","信息展示:我点击的是—— " + bean.getTitle());
}
}
log日志:
当点击“写在Adapter的点击事件”时,
代码同上类似,命名分别为MyAdapterclickActivity的Activity,创建Adapter名为MyClickAdapter,和数据模型AdapterclickBean,不同代码代码如下AdapterclickBean代码:
public class AdapterclickBean {
private String title ;
public String getTitle() {
return title;
}
public void setTitle(String title) {
this.title = title;
}
}
MyClickAdapter代码:
public class MyClickAdapter extends BaseAdapter implements AdapterView.OnItemClickListener{
private List<AdapterclickBean> list ;
private Context context;
// private
public MyClickAdapter(Context context, List<AdapterclickBean> list) {
this.context = context;
this.list = list;
}
@Override
public int getCount() {
return list == null ? 0 : list.size();
}
@Override
public Object getItem(int position) {
return list == null ? 0 : position;
}
@Override
public long getItemId(int position) {
return list == null ? 0 : position;
}
@Override
public View getView(int position, View convertView, ViewGroup parent) {
MyClickView myClickView = null;
if (convertView == null) {
convertView = LayoutInflater.from(context).inflate(R.layout.adapter_myclickadapter,parent,false);
myClickView = new MyClickView();
myClickView.textView = (TextView) convertView.findViewById(R.id.title);
convertView.setTag(myClickView);
}else {
myClickView = (MyClickView) convertView.getTag();
}
AdapterclickBean bean = list.get(position);
myClickView.textView.setText(bean.getTitle());
((ListView)parent).setOnItemClickListener(this);//设置点击事件
return convertView;
}
@Override
public void onItemClick(AdapterView<?> parent, View view, int position, long id) {
AdapterclickBean bean = list.get(position);
Log.e("flytosky","信息展示 点击 :" + bean.getTitle());
}
static class MyClickView {
private TextView textView;
}
}
MyAdapterclickActivity代码:
public class MyAdapterclickActivity extends AppCompatActivity {
private List<AdapterclickBean> list;
private MyClickAdapter adapter;
private ListView listView;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_my_adapterclick);
list = new ArrayList<>();
for (int i = 0 ; i < 18 ; i++) {
AdapterclickBean bean = new AdapterclickBean();
bean.setTitle("我是第 "+i + " 个 item。请点击我");
list.add(bean);
}
adapter = new MyClickAdapter(this,list);
listView = (ListView) findViewById(R.id.listview);
listView.setAdapter(adapter);
}
}点击打印日志:
当点击“写在Item控件的点击事件”时(控件widget)
列表界面代码同上,需要添加接口,代码:
public interface WidgetClickAdapterI {
public void buttonclick (int position);//传入点击item的索引位置
public void textviewclick (String text);//传入文字
}
数据模型WidgetBean代码:
public class WidgetBean {
private String text ;
private String buttontitle ;
public String getButtontitle() {
return buttontitle;
}
public void setButtontitle(String buttontitle) {
this.buttontitle = buttontitle;
}
public String getText() {
return text;
}
public void setText(String text) {
this.text = text;
}
}
继承BaseAdapter的WidgetClickAdapter代码:
public class WidgetClickAdapter extends BaseAdapter {
private List<WidgetBean> list ;
private Context context;
private WidgetClickAdapterI widgetClickAdapterI;
public void setWidgetClickAdapterI(WidgetClickAdapterI widgetClickAdapterI) {
this.widgetClickAdapterI = widgetClickAdapterI;
}public WidgetClickAdapter(Context context, List<WidgetBean> list) { this.context = context; this.list = list; } @Override public int getCount() { return list == null ? 0 : list.size(); } @Override public Object getItem(int position) { return list == null ? 0 : position; } @Override public long getItemId(int position) { return list == null ? 0 : position; } @Override public View getView(final int position, View convertView, ViewGroup parent) { WidgetView widgetView = null; if (convertView == null){ convertView = LayoutInflater.from(context).inflate(R.layout.adapter_widgetclick,parent,false); widgetView = new WidgetView(); widgetView.textView = (TextView) convertView.findViewById(R.id.textview); widgetView.button = (Button) convertView.findViewById(R.id.button); }else { widgetView = (WidgetView) convertView.getTag(); } WidgetBean bean = list.get(position); widgetView.textView.setText(bean.getText()); widgetView.button.setText(bean.getButtontitle()); widgetView.textView.setOnClickListener(new View.OnClickListener() { @Override public void onClick(View v) { if (widgetClickAdapterI == null){//判断是否实现WidgetClickAdapterI的接口,如果没有实现,则退出点击的调用 return; } widgetClickAdapterI.textviewclick(((TextView) v).getText().toString());//将类型为View的v转为TextView,获取它的文字 } }); widgetView.button.setOnClickListener(new View.OnClickListener() { @Override public void onClick(View v) { if (widgetClickAdapterI == null){//判断是否实现WidgetClickAdapterI的接口,如果没有实现,则退出点击的调用 return; } widgetClickAdapterI.buttonclick(position); } }); return convertView; } static class WidgetView { private Button button; private TextView textView ; } } 控制器WidgetClickActivity代码:
public class WidgetClickActivity extends AppCompatActivity implements WidgetClickAdapter.WidgetClickAdapterI{
private List<WidgetBean> list;
private WidgetClickAdapter adapter;
private ListView listView;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_widget_click);
list = new ArrayList<>();
for (int i = 0 ; i< 18 ; i++) {
WidgetBean bean = new WidgetBean();
bean.setButtontitle("第 " + i + "按钮");
bean.setText("第 " + i + "文本");
list.add(bean);
}
adapter = new WidgetClickAdapter(this,list);
adapter.setWidgetClickAdapterI(this);
listView = (ListView) findViewById(R.id.listview); listView.setAdapter(adapter); } @Override public void buttonclick(int position) { WidgetBean bean = list.get(position); Log.e("flytosky","信息展示:我点击按钮—— " + bean.getButtontitle()); } @Override public void textviewclick( String text) { Log.e("flytosky","信息展示:我点击文本—— " + text); }}
打印日志:
这篇博客详细介绍了Android中ListView的三种点击事件处理:1. 在ListView中设置点击事件;2. 在Adapter中处理点击事件;3. 在Item控件级别响应点击。通过实例展示了如何实现这些点击事件,并给出了相关代码示例。
784

被折叠的 条评论
为什么被折叠?



