Android处理ListView的条目长按事件
Android, 条目, ListView
ListActivity和ListView是很常用的组件,用来制作列表形式的用户界面。本文介绍如何正确处理ListView中的条目短按和长按事件,他们的处理方式是不同的。

对于短按事件,处理起来比较简单,我们只需要覆盖ListActivity的onListItemClick()方法,如下所示:

@Override
protected void onListItemClick(ListView arg0, View arg1, int arg2, long arg3) {
CharSequence s = ((TextView)arg1).getText();
Log.e("CallLogActivity",s+ " is clicked");
super.onListItemClick(arg0, arg1, arg2, arg3);
}

对于长按事件,我们需要给listview注册一个OnItemLongClickListener,并实现Listener中定义的方法,如下所示:

getListView().setOnItemLongClickListener(this);//注册

public boolean onItemLongClick(AdapterView parent, View view, int position,
long id) {
Log.e("CallLogActivity", view.toString() + "position=" + position);
CharSequence number = ((TextView) view).getText();
Toast t = Toast.makeText(this, number + " is long clicked",
Toast.LENGTH_LONG);
t.show();
return true;
}

我们使用前面介绍的CallLog的演示例子来演示一下如何实现这两种事件,完整的代码如下所示:

package com.me;

import android.app.ListActivity;
import android.database.Cursor;
import android.os.Bundle;
import android.provider.CallLog;
import android.util.Log;
import android.view.View;
import android.widget.AdapterView;
import android.widget.ListView;
import android.widget.SimpleCursorAdapter;
import android.widget.TextView;
import android.widget.Toast;
import android.widget.AdapterView.OnItemLongClickListener;

public class CallLogActivity extends ListActivity implements
OnItemLongClickListener {

@Override
protected void onCreate(Bundle arg0) {
super.onCreate(arg0);
setContentView(R.layout.main);
Cursor cursor = getContentResolver().query(CallLog.Calls.CONTENT_URI,
null, null, null, CallLog.Calls.DEFAULT_SORT_ORDER);
startManagingCursor(cursor);
SimpleCursorAdapter adapter = new SimpleCursorAdapter(this,
android.R.layout.simple_list_item_1, cursor,
new String[] { CallLog.Calls.NUMBER },
new int[] { android.R.id.text1 });
getListView().setOnItemLongClickListener(this);
setListAdapter(adapter);
}

public boolean onItemLongClick(AdapterView parent, View view, int position,
long id) {
Log.e("CallLogActivity", view.toString() + "position=" + position);
CharSequence number = ((TextView) view).getText();
Toast t = Toast.makeText(this, number + " is long clicked",
Toast.LENGTH_LONG);
t.show();
return true;
}

@Override
protected void onListItemClick(ListView arg0, View arg1, int arg2, long arg3) {
CharSequence s = ((TextView)arg1).getText();
Log.e("CallLogActivity",s+ " is clicked");
super.onListItemClick(arg0, arg1, arg2, arg3);
}
}

更多相关文章

  1. Android监听底层事件的机制总结
  2. Android - ListActivity 单击事件的响应
  3. 总结系列-触摸屏事件的传递机制
  4. Android TouchEvent事件传递机制初识
  5. Android 触控事件解析 - Mastering The Android Touch System 笔

随机推荐

  1. ANDROID 输入法出现挤压屏幕、ANDROID输
  2. 如何解析 android 中的 XML?
  3. android中使用 EditText 时,设定 inputTyp
  4. 浅谈android的selector,背景选择器
  5. ImageView 常用属性的分析
  6. 【Android】EditText标签调用键盘
  7. Android文件的读写
  8. android 常用 属性
  9. Android(安卓)设置完autoLink属性后自定
  10. android 电容屏