我有一个带有自定义适配器的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文件的问题(属性?)还是应该更改实现?干杯!
答案 0 :(得分:1)
解决:我认为额外的布局文件让应用程序感到困惑。它的名称与原始名称完全相同,但最后添加了(v21)。删除第二个文件后,它工作正常。
答案 1 :(得分:0)
查看this closely related problem and the selected answer,我认为您应该对代码进行一些更改。
看到您有LinearLayout
作为子视图的ListView
- 这个ListView
将LinearLayout
作为孩子,而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
的。它实际上阻止了点击转移到各个行。