- iOS/Objective-C 元类和类别
- objective-c - -1001 错误,当 NSURLSession 通过 httpproxy 和/etc/hosts
- java - 使用网络类获取 url 地址
- ios - 推送通知中不播放声音
我有一个扩展 ListActivity 的类,其中列表项响应 OnClick 事件。添加 OnItemLongClickListener 不起作用。不会调用 onItemLongClick() 函数(没有日志输出或 Toast 显示),而是处理正常的 OnClick() 事件。
我想在长按时显示上下文操作栏。在新项目中使用我的代码的最小示例工作正常。所以我的问题是:什么可以阻止触发 onItemLongClick() 触发器?
我的最低 API 是 11。我还将 listView 设置为 longClickable="true"
。
Activity 代码(部分功能):
public class EventListActivity extends ListActivity {
private ArrayList<Event> arrEvents = null;
private ArrayAdapter<Event> adpEvents = null;
private ActionMode mActionMode = null;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
// only create list adapter and set it
arrEvents = new ArrayList<Event>();
adpEvents = new ArrayAdapter<Event>(this, android.R.layout.simple_list_item_activated_2, android.R.id.text1, arrEvents) {
@Override
public View getView(int position, View convertView, ViewGroup parent) {
View view = super.getView(position, convertView, parent);
TextView text1 = (TextView) view.findViewById(android.R.id.text1);
TextView text2 = (TextView) view.findViewById(android.R.id.text2);
text1.setText(arrEvents.get(position).getTitle());
text2.setText(arrEvents.get(position).getDateTimeFormatted());
return view;
}
};
setListAdapter(adpEvents);
// add CAB to ListView
setupCAB();
}
@Override
protected void onResume() {
super.onResume();
// populate list and refresh adapter
createEventList();
adpEvents.notifyDataSetChanged();
// if list empty show emtpy msg, otherwise hide it
setContentView(R.layout.activity_event_list);
TextView empty = (TextView) findViewById(R.id.text_empty);
if(arrEvents.isEmpty()) {
empty.setVisibility(View.VISIBLE);
} else {
empty.setVisibility(View.GONE);
}
}
private void setupCAB() {
// Important: to select single mode
getListView().setChoiceMode(ListView.CHOICE_MODE_SINGLE);
getListView().setOnItemLongClickListener(new AdapterView.OnItemLongClickListener() {
// Called when the user long-clicks an item on the list
@Override
public boolean onItemLongClick(AdapterView<?> parent, View row, int position, long rowid) {
Log.w("EventListActivity", "Long click detected!");
Toast.makeText(EventListActivity.this, "Long click detected!", Toast.LENGTH_SHORT).show();
if (mActionMode != null) {
return false;
}
// Important: to mark the editing row as activated
getListView().setItemChecked(position, true);
// Start the CAB using the ActionMode.Callback defined above
mActionMode = EventListActivity.this.startActionMode(mActionModeCallback);
return true;
}
});
}
private ActionMode.Callback mActionModeCallback = new ActionMode.Callback() {
// Called when the action mode is created; startActionMode() was called
@Override
public boolean onCreateActionMode(ActionMode mode, Menu menu) {
// Inflate a menu resource providing context menu items
MenuInflater inflater = mode.getMenuInflater();
inflater.inflate(R.menu.event_context, menu);
return true;
}
// Called when the user enters the action mode
@Override
public boolean onPrepareActionMode(ActionMode mode, Menu menu) {
// Disable the list to avoid selecting other elements while editing one
EventListActivity.this.getListView().setEnabled(false);
return true; // Return false if nothing is done
}
// Called when the user selects a contextual menu item
@Override
public boolean onActionItemClicked(ActionMode mode, MenuItem item) {
switch (item.getItemId()) {
case R.id.mnu_share_event:
//TODO share event
mode.finish();
return true;
default:
return false;
}
}
// Called when the user exits the action mode
@Override
public void onDestroyActionMode(ActionMode mode) {
// Re-enable the list after edition
EventListActivity.this.getListView().setEnabled(true);
mActionMode = null;
}
};
}
activity_event_list.xml:
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:tools="http://schemas.android.com/tools"
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"
tools:context=".EventListActivity" >
<TextView
android:id="@+id/text_empty"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_alignParentTop="true"
android:layout_centerHorizontal="true"
android:layout_marginTop="45dp"
android:text="@string/empty"
android:textAppearance="?android:attr/textAppearanceLarge"
android:visibility="gone" />
<ListView
android:id="@android:id/list"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_alignParentLeft="true"
android:layout_alignParentTop="true"
android:longClickable="true" >
</ListView>
</RelativeLayout>
最佳答案
如果您的 ListView 中有响应 onClick()
事件的按钮,则需要在包含这些按钮的容器中设置以下内容:
android:descendantFocusability="blocksDescendants"
如果您拥有的是 TextView ,则问题会稍微棘手一些。看到这个:Focusable EditText inside ListView
关于java - ListView OnItemLongClickListener() 未触发,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20291765/
它使用函数 OnItemLongClickListener 但在释放按钮时也会运行 OnItemClickListener lv_driver.setOnItemLongClickListen
我有一个 ListView ,显示文件夹内的所有文件。使用OnItemLongClickListener删除文件的方法是什么? 谢谢。 最佳答案 在OnItemLongClickListener()方
我有一个带有自定义适配器的 ListView , public class ClueArrayAdapter extends ArrayAdapter { --- ---- @Override p
环境:我有一个 Android ListView,其行由 TextView 组成,其中包含一些带有可点击链接 (URLSpans) 的 HTML。在 ListView 上,我设置了一个 OnItemL
我有一个扩展 ListActivity 的类,其中列表项响应 OnClick 事件。添加 OnItemLongClickListener 不起作用。不会调用 onItemLongClick() 函数(
我正在处理一个 ListView,我在 onItemLongClickListener 中对所选项目使用了 setBackgroundColor。我的问题是,当我这样做并滚动时,它也在设置 ListV
在我的项目中,当 Items LongCLick 时,我在 gridview 中启用项目的移动(如拖动或重新排序)。为此,我使用了 this 中的代码引用。 当我长按 gridview 中的项目时,不
任何人都可以解决这个问题吗?我的操作栏中有一个微调器,我想在其中捕获长按事件,OnLongClickListener 或单个项目的 OnItemLongClickListener - 以便用户可以编辑
我想在长按时禁用 onItemclicklistener。问题是我正在 GridView 的 onItemclick 上播放视频。我想在 onItemLongclick 上执行一些其他任务。但是,当我
我希望在自定义 ListView 中长按一个项目后出现上下文菜单。我正在使用 ActionBarSherlock .尝试使用 Toast 通知进行调试时,我发现长按事件未被触发。如何解决这个问题? m
我向 ListView 注册了一个 OnItemLongClickListener,但是当处于操作模式时,不会调用该监听器。 这是预期的行为,如 perfromLongPress 中所示方法。 任何人
我的 ListView Activity 中有 OnItemClickListener,我在其中开始另一个 Activity ,我还有 OnItemLongClickListener,基本上我想删除长
我正在使用 ItemClickSupport 类,我想使用他们的长按监听器,但我如何知道它是否被长按?遗憾的是我没有找到任何使用它的示例。 ItemClickSupport.addTo(recycle
我有一个从 FirebaseDatabase 填充的 listView,我想使用 onIntemLongClickListener 删除项目,但它根本不起作用,该事件从未被调用。我需要在代码中添加什么
我的 gridview 上的 clickListener 有问题。 LongClickListener 可以正常工作。但是我似乎无法从点击监听器中得到任何响应。 我的代码如下。 我很困惑为什么长按有效
我有 ListView,其中 onItemClickListener 和 onLongItemClickListener 用于不同的选项。它在 jellybean 中运行良好。但是在 Nexus5 中
我有一个 Activity 扩展 BaseActivity。它包含一个 ListView,它由我的适配器(扩展 BaseAdapter)初始化。 ListView 中的每个项目都是一个带有 Butto
public void ListDrwaer() { String outPut = ""; List> dataList = new ArrayList>(); try {
我正在尝试将 OnItemLongClickListener 用于 Android 上的 listView。此代码在添加到 onCreate 方法时工作正常。 mContactList.setOnIt
我正在尝试为我的 groupie 回收器列表实现一个长按监听器,但我不断收到一个错误,它需要一个 Boolean 并且它找到了 unit。有人可以指出我正确的方向吗? 适配器代码: private
我是一名优秀的程序员,十分优秀!