Android-无法选择应用小部件内的ListView项目 [英] Android - ListView items inside app widget not selectable

查看:89
本文介绍了Android-无法选择应用小部件内的ListView项目的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

我已经为我的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屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆