Android-无法选择应用小部件内的ListView项目 [英] Android - ListView items inside app widget not selectable
问题描述
我已经为我的Android应用程序构建了一个收集应用程序小部件.该小部件由一个工具栏和一个ListView
任务组成(这是一个待办事项列表).
问题是ListView
没有显示项目之间的分隔线,并且项目本身也不可选.
I have built a collection app widget for my Android app. The widget consists of a toolbar and then a ListView
of tasks (it's a todo-list).
The problem is the ListView
doesn't show dividers between items and also the items themselves aren't selectable.
我的代码如下:
我的agenda_app_widget.xml
<?xml version="1.0" encoding="utf-8" ?>
<FrameLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="match_parent"
android:layout_height="match_parent">
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:background="@color/white"
android:orientation="vertical">
<RelativeLayout
android:id="@+id/widget_toolbar"
android:layout_width="match_parent"
android:layout_height="?android:attr/actionBarSize"
android:background="@color/colorPrimary">
<TextView
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_alignParentStart="true"
android:layout_centerVertical="true"
android:layout_marginStart="16dp"
android:text="@string/tasks"
android:textAppearance="@android:style/TextAppearance.DeviceDefault.Widget.ActionBar.Title"
android:textColor="@color/white" />
<ImageView
android:id="@+id/addTaskIv"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_alignParentEnd="true"
android:layout_centerVertical="true"
android:layout_gravity="center"
android:layout_marginEnd="16dp"
android:contentDescription="@string/add_task"
android:src="@drawable/ic_add_black_24dp"
android:tint="@color/white" />
</RelativeLayout>
<ListView
android:id="@+id/tasksLView"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:descendantFocusability="blocksDescendants"/>
</LinearLayout>
</FrameLayout>
这里是tasks_widget_list_item.xml
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:orientation="vertical" android:layout_width="match_parent"
android:layout_height="match_parent"
android:paddingStart="16dp"
android:paddingEnd="16dp"
android:id="@+id/task_list_item_main">
<TextView android:id="@+id/tvTaskTitle"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:paddingBottom="4dp"
android:textColor="@color/black" />
<TextView android:id="@+id/tvTaskHour"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:paddingBottom="4dp"
android:textColor="@color/black" />
<TextView android:id="@+id/tvTaskDay"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:paddingBottom="4dp"
android:textColor="@color/black" />
</LinearLayout>
以及源代码WidgetDataProvider.java
public class WidgetDataProvider implements RemoteViewsService.RemoteViewsFactory {
private Context mContext;
private List<Task> mTasks;
private TaskDataSource mTaskDao;
public WidgetDataProvider(Context context) {
mContext = context;
}
@Override
public void onCreate() {
mTaskDao = new TaskDataSource(mContext);
mTaskDao.open();
mTasks = mTaskDao.getAllTasks();
mTaskDao.close();
}
@Override
public void onDataSetChanged() {
mTaskDao.open();
mTasks = mTaskDao.getAllTasks();
mTaskDao.close();
}
@Override
public void onDestroy() {}
@Override
public int getCount() {
return mTasks.size();
}
@Override
public RemoteViews getViewAt(int position) {
RemoteViews remoteViews = new RemoteViews(mContext.getPackageName(),
R.layout.tasks_widget_list_item);
Task task = mTasks.get(position);
remoteViews.setTextViewText(R.id.tvTaskTitle, task.getTitle());
remoteViews.setTextViewText(R.id.tvTaskDay, DateFormat.getDateInstance().format(task.getDay()));
remoteViews.setTextViewText(R.id.tvTaskHour, new SimpleDateFormat("HH:mm", Locale.getDefault()).format(task.getHour()));
return remoteViews;
}
@Override
public RemoteViews getLoadingView() {
return null;
}
@Override
public int getViewTypeCount() {
return 1;
}
@Override
public long getItemId(int position) {
return position;
}
@Override
public boolean hasStableIds() {
return false;
}
}
我该如何解决?
谢谢.
推荐答案
要在您的ListView
中显示分隔线,请使用
To show a divider in your ListView
use
android:dividerHeight="4px"
android:descendantFocusability="blocksDescendants"
并使ListView
android:clickable="true"
所以您最终的ListView
可能看起来像这样
So your final ListView
may look like this
<ListView
android:id="@+id/tasksLView"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:divider="#FFCC00"
android:dividerHeight="4px"
android:clickable="true"
android:descendantFocusability="blocksDescendants"/>
您也可以考虑在tasks_widget_list_item
中添加clickable
属性.
You might consider adding clickable
attribute in your tasks_widget_list_item
too.
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:orientation="vertical" android:layout_width="match_parent"
android:layout_height="match_parent"
android:paddingStart="16dp"
android:paddingEnd="16dp"
android:clickable="true"
android:id="@+id/task_list_item_main">
<!-- .... Other views -->
</LinearLayout>
这篇关于Android-无法选择应用小部件内的ListView项目的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!