未调用ListView onItemClick

时间:2016-06-06 19:04:36

标签: android android-layout listview listitem

我有一个带有自定义适配器的ListView和仅包含TextView的列表项。列表项在onCreate回调方法中设置了OnItemClick方法。

 templatesListView.setOnItemClickListener(new AdapterView.OnItemClickListener() {

        @Override
        public void onItemClick(AdapterView<?> parent, View view, int position, long id) {
            Log.d(DEBUG_TAG, "templatesListView onClick()");
            //item is selected from the cursor to get necessary data
            Log.d(DEBUG_TAG, "ListView count: " + templatesListView.getCount());

            Log.d(DEBUG_TAG, "messagesCursor count: " + messagesCursor.getCount());

            if (position >= messagesCursor.getCount()) {
                Log.d(DEBUG_TAG, "Unable to access element " + position + ", it does not exist in the messagesCursor. Cursor count: " + messagesCursor.getCount());
            }

            messagesCursor.moveToPosition(position);
            final String selectedItemName = messagesCursor.getString(1);

            AlertDialog.Builder builder = new AlertDialog.Builder(SendMessageActivity.this);
            builder.setTitle(selectedItemName).setMessage("Do you want to use template: "+selectedItemName+"?");

            //Use template onClick
            builder.setPositiveButton("Use", new DialogInterface.OnClickListener() {
                public void onClick(DialogInterface dlg, int x) {
                    messageEditText.setText(selectedItemName);
                }
            });

            //Cancel onClick
            builder.setNegativeButton("Cancel", new DialogInterface.OnClickListener() {
                public void onClick(DialogInterface dlg, int x) {
                }
            });
            builder.show();
        }
    });

活动布局文件中的ListView定义为:

 <ListView
    android:layout_width="wrap_content"
    android:layout_height="wrap_content"
    android:id="@+id/templatesListView"
    android:layout_alignParentRight="true"
    android:clickable="true"
    android:layout_alignParentEnd="true"
    android:layout_alignParentLeft="true"
    android:layout_alignParentStart="true"
    android:layout_below="@+id/sendButton" />

列表项在单独的布局文件中定义为:

<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:orientation="vertical" android:layout_width="match_parent"
android:layout_height="match_parent"
android:weightSum="1">


<TextView
    android:layout_width="wrap_content"
    android:layout_height="wrap_content"
    android:textAppearance="?android:attr/textAppearanceMedium"
    android:text="Medium Text"
    android:id="@+id/name_textView" />

当我在Android 4.4.4上运行应用程序时,onClick方法被正确调用,但是当我在Android 5.1.1上运行时,它根本就没有被调用。

还为v21 +单独创建了列表项布局,请找到以下代码:

<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:orientation="vertical" android:layout_width="match_parent"
android:layout_height="match_parent"
android:weightSum="1">


<TextView
    android:layout_width="wrap_content"
    android:layout_height="wrap_content"
    android:textAppearance="?android:attr/textAppearanceLarge"
    android:text="Medium Text"
    android:id="@+id/name_textView"
    android:singleLine="true"
    android:textColor="@color/foreground_material_light"
    android:theme="@android:style/Widget.Material.Light.Button.Borderless" />

你们知道我应该改变什么才能使它在API级别21+上运行吗?这只是xml文件的问题(属性?)还是应该更改实现?干杯!

3 个答案:

答案 0 :(得分:1)

解决:我认为额外的布局文件让应用程序感到困惑。它的名称与原始名称完全相同,但最后添加了(v21)。删除第二个文件后,它工作正常。

答案 1 :(得分:0)

查看this closely related problem and the selected answer,我认为您应该对代码进行一些更改。

看到您有LinearLayout作为子视图的ListView - 这个ListViewLinearLayout作为孩子,而TextView又有name_textView 1}}小时候?在这种情况下,ListView的子视图可能应该具有onClickListener。这意味着将以下属性设置为<TextView android:layout_width="wrap_content" android:layout_height="wrap_content" android:textAppearance="?android:attr/textAppearanceMedium" android:text="Medium Text" android:focusableInTouchMode="false" android:clickable="false" android:focusable="false" android:id="@+id/name_textView" />

<ListView
    android:layout_width="wrap_content"
    android:layout_height="wrap_content"
    android:id="@+id/templatesListView"
    android:layout_alignParentRight="true"
    android:layout_alignParentEnd="true"
    android:layout_alignParentLeft="true"
    android:layout_alignParentStart="true"
    android:layout_below="@+id/sendButton" />

然后将templatesListView保持为:

<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:orientation="vertical" android:layout_width="match_parent"
android:layout_height="match_parent"
android:clickable="true"
android:weightSum="1">

最后,按如下方式更改列表项线性布局:

    function populatesidebar() {
        var sidebarNameHtml = '';
        @foreach (WebApplication1.Models.User user in Model)
        {
            @: sidebarNameHtml = sidebarNameHtml +'<div class="sidebar-name"><a href="javascript:register_popup(\'@user.FName\', \'@user.LName\');"><img width="30" height="30" src="@Url.Content("~/Images/Jodaine.PNG")"/><span>Jodaine</span></a></div>';
        }
        $('.chat-sidebar').html(sidebarNameHtml);
    }

尝试一下,让我知道这是否有帮助。

答案 2 :(得分:0)

只需删除它,

android:clickable="true"
来自ListView

。它实际上阻止了点击转移到各个行。