列表视图项目不可点击
Listview items are not clickable
我使用 'ListFragment' 在列表视图中列出项目。列表视图的 xml 是:
<ListView
android:layout_width="match_parent"
android:layout_height="0dp"
android:id="@android:id/list"
android:layout_weight="1"
android:dividerHeight="4dp" />
项目的 XML 布局是:
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:orientation="horizontal"
android:layout_width="match_parent"
android:layout_height="match_parent">
<TextView
android:id="@+id/fromId"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:visibility="gone" />
<TextView
android:id="@+id/fromName"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:singleLine="false"
android:layout_weight="1" />
<TextView
android:id="@+id/toId"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:visibility="gone" />
<TextView
android:id="@+id/toName"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:singleLine="false"
android:layout_weight="1"/>
</LinearLayout>
我在片段中还有以下内容:
@Override
public void onListItemClick(ListView l, View v, int position, long id) {
MyItem item = (MyItem)l.getItemAtPosition(position);
}
但是,这些项目不可点击。
我错过了什么?
尝试添加到您的 ListView 布局
android:clickable="true"
并在您的 ListFragment
中实现 listView.setOnItemClickListener
你试过吗
ListView listView = getListView();
listView.setOnItemClickListener(new AdapterView.OnItemClickListener() {
@Override
public void onItemClick(AdapterView<?> parent, View view, int position, long id) {
Toast.makeText(getActivity().getBaseContext(), "Item clicked: " + [position], Toast.LENGTH_LONG).show();
// Your Staff
}
});
或者
getListView().setOnItemClickListener(this); // onActivityCreated()
@Override
public void onItemClick(AdapterView<?> parent, View view, int position,
long id) {
Toast.makeText(getActivity(), "Item: " + position, Toast.LENGTH_SHORT)
.show();
}
已编辑
@Override
public void onListItemClick(ListView l, View v, int position, long id) {
super.onListItemClick(l, v, position, id);
Toast.makeText(getActivity().getBaseContext(), "Item clicked: " + [position], Toast.LENGTH_LONG).show();
MyItem item = (MyItem)l.getItemAtPosition(position);
}
在你的项目父布局中使用这一行
android:descendantFocusability="afterDescendants"
它有三个选项afterDescendants
、beforeDescendants
和blocksDescendants
。你应该使用其中之一,它会起作用。
我使用 'ListFragment' 在列表视图中列出项目。列表视图的 xml 是:
<ListView
android:layout_width="match_parent"
android:layout_height="0dp"
android:id="@android:id/list"
android:layout_weight="1"
android:dividerHeight="4dp" />
项目的 XML 布局是:
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:orientation="horizontal"
android:layout_width="match_parent"
android:layout_height="match_parent">
<TextView
android:id="@+id/fromId"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:visibility="gone" />
<TextView
android:id="@+id/fromName"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:singleLine="false"
android:layout_weight="1" />
<TextView
android:id="@+id/toId"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:visibility="gone" />
<TextView
android:id="@+id/toName"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:singleLine="false"
android:layout_weight="1"/>
</LinearLayout>
我在片段中还有以下内容:
@Override
public void onListItemClick(ListView l, View v, int position, long id) {
MyItem item = (MyItem)l.getItemAtPosition(position);
}
但是,这些项目不可点击。
我错过了什么?
尝试添加到您的 ListView 布局
android:clickable="true"
并在您的 ListFragment
中实现 listView.setOnItemClickListener你试过吗
ListView listView = getListView();
listView.setOnItemClickListener(new AdapterView.OnItemClickListener() {
@Override
public void onItemClick(AdapterView<?> parent, View view, int position, long id) {
Toast.makeText(getActivity().getBaseContext(), "Item clicked: " + [position], Toast.LENGTH_LONG).show();
// Your Staff
}
});
或者
getListView().setOnItemClickListener(this); // onActivityCreated()
@Override
public void onItemClick(AdapterView<?> parent, View view, int position,
long id) {
Toast.makeText(getActivity(), "Item: " + position, Toast.LENGTH_SHORT)
.show();
}
已编辑
@Override
public void onListItemClick(ListView l, View v, int position, long id) {
super.onListItemClick(l, v, position, id);
Toast.makeText(getActivity().getBaseContext(), "Item clicked: " + [position], Toast.LENGTH_LONG).show();
MyItem item = (MyItem)l.getItemAtPosition(position);
}
在你的项目父布局中使用这一行
android:descendantFocusability="afterDescendants"
它有三个选项afterDescendants
、beforeDescendants
和blocksDescendants
。你应该使用其中之一,它会起作用。