android - ListView android中的复合列表项没有触发上下文菜单

标签 android android-layout android-listview android-contextmenu

我正在开发一个待办事项应用程序。在此应用程序中,待办事项作为列表项添加到 ListView 中。每个列表项(对应于每个待办事项)都有包含多个 View 元素的相对布局。我已经为此 ListView 注册了一个上下文菜单。但问题是,当我长按列表项时,它没有被触发。以下是代码块。请帮助..

列表 Activity (显示待办事项的 ListView ):

公共(public)类 ToDoManagerActivity 扩展 ListActivity {

private static final int ADD_TODO_ITEM_REQUEST = 0;
private static final String FILE_NAME = "myToDos.txt";
private static final String TAG = "Lab-UserInterface";

// IDs for menu items
private static final int MENU_DELETE = Menu.FIRST;
private static final int MENU_DUMP = Menu.FIRST + 1;
private static final int MENU_ADD = Menu.FIRST + 2;

ToDoListAdapter mAdapter;
TextView footerView;

@Override
public void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);

    // Create a new TodoListAdapter for this ListActivity's ListView
    mAdapter = new ToDoListAdapter(getApplicationContext());


    // TODO - Attach the adapter to this ListActivity's ListView
    getListView().setAdapter(mAdapter);

    // register for context menu
    registerForContextMenu(getCurrentFocus());

}



@Override
public void onCreateContextMenu(ContextMenu menu, View v,
        ContextMenuInfo menuInfo) {
    // TODO Auto-generated method stub
    super.onCreateContextMenu(menu, v, menuInfo);

    MenuInflater contextMenu = getMenuInflater();
    contextMenu.inflate(R.menu.menu_context, menu);

}

@Override
public boolean onCreateOptionsMenu(Menu menu) {
    super.onCreateOptionsMenu(menu);

    menu.add(Menu.NONE, MENU_DELETE, Menu.NONE, "Delete all");
    menu.add(Menu.NONE, MENU_DUMP, Menu.NONE, "Dump to log");
    menu.add(Menu.NONE, MENU_ADD, Menu.NONE, "Add ToDo");
    return true;
}

@Override
public boolean onOptionsItemSelected(MenuItem item) {
    switch (item.getItemId()) {
    case MENU_DELETE:
        mAdapter.clear();
        return true;
    case MENU_DUMP:
        dump();
        return true;
    case MENU_ADD:
        Intent mAddToDo = new Intent(ToDoManagerActivity.this,
                AddToDoActivity.class);
        startActivityForResult(mAddToDo, ADD_TODO_ITEM_REQUEST);
        return true;
    default:
        return super.onOptionsItemSelected(item);
    }

}}

列表项的布局如下:

<?xml version="1.0" encoding="utf-8"?>
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:id="@+id/RelativeLayout1"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:orientation="vertical" >

<TextView
    android:id="@+id/titleView"
    android:textColor="#000000"
    android:textStyle="italic"
    android:layout_width="match_parent"
    android:layout_height="wrap_content"
    android:layout_alignParentLeft="true"
    android:layout_alignParentTop="true"
    android:textAppearance="?android:attr/textAppearanceLarge" >
</TextView>

<TextView
    android:id="@+id/StatusLabel"
    android:textColor="#000000"
    android:layout_width="wrap_content"
    android:layout_height="wrap_content"
    android:layout_alignBaseline="@+id/statusCheckBox"
    android:layout_alignParentLeft="true"
    android:layout_alignParentTop="true"
    android:layout_marginTop="17dp"
    android:text="@string/done_string" >
</TextView>

<CheckBox
    android:id="@+id/statusCheckBox"
    android:textColor="#000000"
    android:layout_width="wrap_content"
    android:layout_height="wrap_content"
    android:layout_alignParentTop="true"
    android:layout_marginTop="52dp"
    android:layout_toRightOf="@+id/StatusLabel" >
</CheckBox>

<TextView
    android:id="@+id/PriorityLabel"
    android:textColor="#000000"
    android:textStyle="bold"
    android:layout_width="wrap_content"
    android:layout_height="wrap_content"
    android:layout_alignBaseline="@+id/statusCheckBox"
    android:layout_alignTop="@+id/StatusLabel"
    android:layout_toLeftOf="@+id/priorityView"
    android:text="@string/priority_string" >
</TextView>

<TextView
    android:id="@+id/priorityView"
    android:textColor="#000000"
    android:layout_width="50dip"
    android:layout_height="wrap_content"
    android:layout_alignBaseline="@+id/statusCheckBox"
    android:layout_alignParentRight="true"
    android:layout_alignTop="@+id/StatusLabel" >
</TextView>

<TextView
    android:id="@+id/DateLabel"
    android:textColor="#000000"
    android:layout_width="wrap_content"
    android:layout_height="wrap_content"
    android:layout_alignParentLeft="true"
    android:layout_below="@+id/statusCheckBox"
    android:text="@string/date_string" >
</TextView>

<TextView
    android:id="@+id/dateView"
    android:textColor="#000000"
    android:layout_width="wrap_content"
    android:layout_height="wrap_content"
    android:layout_alignBaseline="@+id/DateLabel"
    android:layout_toRightOf="@+id/DateLabel" >
</TextView>

</RelativeLayout>

上下文菜单xml如下:

<?xml version="1.0" encoding="utf-8"?>
<menu xmlns:android="http://schemas.android.com/apk/res/android" >

<item
    android:id="@+id/rajit_me"
    android:title="Rajit"/>
<item
    android:id="@+id/mou_me"
    android:title="Mou"/>
<item
    android:id="@+id/suha_me"
    android:title="Suha"/>
<item
    android:id="@+id/samah_me"
    android:title="samah"/>
</menu>

最佳答案

我已经解决了问题:只需在列表项中的检查 ListView 中添加以下两个属性即可:

<CheckBox
android:id="@+id/statusCheckBox"
android:textColor="#000000"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_alignParentTop="true"
android:layout_marginTop="52dp"
android:layout_toRightOf="@+id/StatusLabel" 

<!-- add these two attributes to disable the focus of the check box -->
android:focusable="false"
android:focusableInTouchMode="false"
>
</CheckBox>

关于android - ListView android中的复合列表项没有触发上下文菜单,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26640132/

相关文章:

android - 具有多个具有相同 ID 的按钮以在 Phonegap 中绑定(bind) jquerymobile

Android Firebase 深层链接不适用于 redmi 小米设备

java - keytool 没有为 debug.store 生成 md5 哈希值

java - 如何使单行(RowTable)中的所有小部件可见?

android - 风格没有得到应用

android - 在带有 ListFragment 的 Android FragmentActivity 中找不到 id 的 View

android - 查询一个文件的信息android

android - 为多个设备定义 Android 布局文件的最佳方式?

android - 不断向 ListView 添加新数据的最佳方法

android - 如何展开和折叠 ListView 中的项目